insque(3) Library Functions Manual insque(3) insque, remque - / (libc -lc) #include void insque(void *elem, void *prev); void remque(void *elem); glibc ( feature_test_macros(7)): insque() remque(): _XOPEN_SOURCE >= 500 || /* glibc >= 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE insque() remque() . . ( NULL NULL ) . insque() elem prev. insque(elem, NULL) elem NULL. prev insque() . remque() elem . attributes(7). +------------+------------------------------------+--------------------+ || | | +------------+------------------------------------+--------------------+ |insque(), | | MT-Safe | |remque() | | | +------------+------------------------------------+--------------------+ struct qelem * : struct qelem { struct qelem *q_forw; struct qelem *q_back; char q_data[1]; }; _GNU_SOURCE . UNIX. POSIX. . POSIX.1-2008. POSIX.1-2001. glibc 2.4 prev NULL. . insque(). : $ ./a.out -c a b c Traversing completed list: a b c That was a circular list #include #include #include #include struct element { struct element *forward; struct element *backward; char *name; }; static struct element * new_element(void) { struct element *e; e = malloc(sizeof(*e)); if (e == NULL) { fprintf(stderr, "malloc() failed\n"); exit(EXIT_FAILURE); } return e; } int main(int argc, char *argv[]) { struct element *first, *elem, *prev; int circular, opt, errfnd; /* The "-c" command-line option can be used to specify that the list is circular. */ errfnd = 0; circular = 0; while ((opt = getopt(argc, argv, "c")) != -1) { switch (opt) { case 'c': circular = 1; break; default: errfnd = 1; break; } } if (errfnd || optind >= argc) { fprintf(stderr, "Usage: %s [-c] string...\n", argv[0]); exit(EXIT_FAILURE); } /* Create first element and place it in the linked list. */ elem = new_element(); first = elem; elem->name = argv[optind]; if (circular) { elem->forward = elem; elem->backward = elem; insque(elem, elem); } else { insque(elem, NULL); } /* Add remaining command-line arguments as list elements. */ while (++optind < argc) { prev = elem; elem = new_element(); elem->name = argv[optind]; insque(elem, prev); } /* Traverse the list from the start, printing element names. */ printf("Traversing completed list:\n"); elem = first; do { printf(" %s\n", elem->name); elem = elem->forward; } while (elem != NULL && elem != first); if (elem == first) printf("That was a circular list\n"); exit(EXIT_SUCCESS); } queue(7) 3 . . : . 6.18 8 2026 insque(3)