+'\" t
.\" peter memishian -- meem@gnu.ai.mit.edu
.\" $Id: insque.3,v 1.2 1996/10/30 21:03:39 meem Exp meem $
.\" and Copyright (c) 2010, Michael Kerrisk <mtk.manpages@gmail.com>
.\"
-.\" %%%LICENSE_START(VERBATIM)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date. The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein. The author(s) may not
-.\" have taken the same level of care in the production of this manual,
-.\" which is licensed free of charge, as they might when working
-.\" professionally.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" References consulted:
.\" Linux libc source code (5.4.7)
.\" mtk, 2010-09-09: Noted glibc 2.4 bug, added info on circular
.\" lists, added example program
.\"
-.TH INSQUE 3 2017-05-03 "" "Linux Programmer's Manual"
+.TH insque 3 (date) "Linux man-pages (unreleased)"
.SH NAME
insque, remque \- insert/remove an item from a queue
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
.SH SYNOPSIS
.nf
.B #include <search.h>
.PP
.BI "void insque(void *" elem ", void *" prev );
-.PP
.BI "void remque(void *" elem );
.fi
.PP
-.in -4n
+.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
-.in
+.RE
.PP
-.ad l
.BR insque (),
.BR remque ():
-.RS 4
-_XOPEN_SOURCE\ >=\ 500
-.\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
- || /* Glibc since 2.19: */ _DEFAULT_SOURCE
- || /* Glibc versions <= 2.19: */ _SVID_SOURCE
-.RE
-.ad
+.nf
+ _XOPEN_SOURCE >= 500
+.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
+ || /* Glibc >= 2.19: */ _DEFAULT_SOURCE
+ || /* Glibc <= 2.19: */ _SVID_SOURCE
+.fi
.SH DESCRIPTION
The
.BR insque ()
and
.BR remque ()
-functions manipulate doubly-linked lists.
+functions manipulate doubly linked lists.
Each element in the list is a structure of
which the first two elements are a forward and a
backward pointer.
The
.BR remque ()
function removes the element pointed to by \fIelem\fP from the
-doubly-linked list.
+doubly linked list.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
+.ad l
+.nh
.TS
allbox;
-lb lb lb
+lbx lb lb
l l l.
Interface Attribute Value
T{
.BR remque ()
T} Thread safety MT-Safe
.TE
+.hy
+.ad
.sp 1
-.SH CONFORMING TO
+.SH STANDARDS
POSIX.1-2001, POSIX.1-2008.
.SH NOTES
On ancient systems,
defined as:
.PP
.in +4n
-.nf
+.EX
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
char q_data[1];
};
-.fi
+.EE
.in
.PP
This is still what you will get if
Consequently, to build a linear list, the caller had to build a list
using an initial call that contained the first two elements of the list,
with the forward and backward pointers in each element suitably initialized.
-.SH EXAMPLE
+.SH EXAMPLES
The program below demonstrates the use of
.BR insque ().
Here is an example run of the program:
+.PP
.in +4n
-.nf
-
-.RB "$ " "./a.out -c a b c"
+.EX
+.RB "$ " "./a.out \-c a b c"
Traversing completed list:
a
b
c
That was a circular list
-.fi
+.EE
.in
.SS Program source
\&
+.\" SRC BEGIN (insque.c)
.EX
+#include <search.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include <search.h>
struct element {
struct element *forward;
{
struct element *e;
- e = malloc(sizeof(struct element));
+ e = malloc(sizeof(*e));
if (e == NULL) {
- fprintf(stderr, "malloc() failed\\n");
+ fprintf(stderr, "malloc() failed\en");
exit(EXIT_FAILURE);
}
int circular, opt, errfnd;
/* The "\-c" command\-line option can be used to specify that the
- list is circular */
+ list is circular. */
errfnd = 0;
circular = 0;
while ((opt = getopt(argc, argv, "c")) != \-1) {
switch (opt) {
- case 'c':
+ case \(aqc\(aq:
circular = 1;
break;
default:
}
if (errfnd || optind >= argc) {
- fprintf(stderr, "Usage: %s [\-c] string...\\n", argv[0]);
+ fprintf(stderr, "Usage: %s [\-c] string...\en", argv[0]);
exit(EXIT_FAILURE);
}
- /* Create first element and place it in the linked list */
+ /* Create first element and place it in the linked list. */
elem = new_element();
first = elem;
insque(elem, NULL);
}
- /* Add remaining command\-line arguments as list elements */
+ /* Add remaining command\-line arguments as list elements. */
while (++optind < argc) {
prev = elem;
insque(elem, prev);
}
- /* Traverse the list from the start, printing element names */
+ /* Traverse the list from the start, printing element names. */
- printf("Traversing completed list:\\n");
+ printf("Traversing completed list:\en");
elem = first;
do {
- printf(" %s\\n", elem\->name);
+ printf(" %s\en", elem\->name);
elem = elem\->forward;
} while (elem != NULL && elem != first);
if (elem == first)
- printf("That was a circular list\\n");
+ printf("That was a circular list\en");
exit(EXIT_SUCCESS);
}
.EE
+.\" SRC END
.SH SEE ALSO
-.BR queue (3)
+.BR queue (7)