Linux repositories inspector
2015-08-08
Aliases: qsort_r(3), qsort_r(3), qsort_r(3), qsort_r(3), qsort_r(3), qsort_r(3), qsort_r(3), qsort_r(3), qsort_r(3), qsort_r(3)

manpages-pl-dev

Polish man pages for developers

man-pages-pl

Polish man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

NAZWA

qsort, qsort_r - sortuje tablicę

SKŁADNIA

#include <stdlib.h>

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg);
Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):
qsort_r(): _GNU_SOURCE

OPIS

Funkcja qsort() sortuje tablicę nmemb elementów o rozmiarze size. Argument base wskazuje na początek tablicy.
Zawartość tablicy jest sortowana w porządku rosnącym, zgodnie z funkcją porównawczą, określoną przez wskaźnik compar. Funkcja ta jest wołana z dwoma argumentami, które wskazują na porównywane obiekty.
Funkcja porównująca musi zwracać liczbę całkowitą, która jest mniejsza, równa, lub większa od zera. Oznacza to wtedy, odpowiednio, że pierwszy argument jest mniejszy, równy, lub większy od drugiego. Jeśli oba porównywane elementy są jednakowe, to ich kolejność w posortowanej tablicy jest nieokreślona.
Funkcja qsort_r() jest taka sama jak qsort(), z wyjątkiem tego, że funkcja porównująca compar przyjmuje trzeci argument. Wskaźnik podany w argumencie arg jest przekazywany do funkcji porównującej. W ten sposób funkcja porównująca nie potrzebuje zmiennych globalnych, by przekazywać sobie dowolne argumenty i dlatego jest bezpieczna do używana w aplikacji wielowątkowej.

WARTOŚĆ ZWRACANA

Funkcje qsort() i qsort_r() nic nie zwracają.

WERSJE

qsort_r() zostało dodane w wersji 2.8 biblioteki glibc.

ATRYBUTY

Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
Interfejs Atrybut Wartość
qsort(), qsort_r() Bezpieczeństwo wątkowe MT-Safe

ZGODNE Z

qsort(): POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.

UWAGI

Aby porównać łańcuch znaków w stylu C, funkcja porównująca może wywołać strcmp(3), tak jak to pokazano w przykładzie poniżej.

PRZYKŁAD

Jeden przykład użycia można znaleźć w podręczniku bsearch(3).
Kolejnym przykładem jest następujący program, sortujący łańcuchy znaków podane w argumentach linii poleceń:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int cmpstringp(const void *p1, const void *p2) { /* Argumentami tej funkcji są "wskaźniki do wskaźników na znak", ale argumentami strcmp(3) są "wskaźniki na znak", dlatego potrzebne jest rzutowanie i dereferencja */
return strcmp(* (char * const *) p1, * (char * const *) p2); }
int main(int argc, char *argv[]) { int j;
if (argc < 2) { fprintf(stderr, "Użycie: %s <string>...\n", argv[0]); exit(EXIT_FAILURE); }
qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);
for (j = 1; j < argc; j++) puts(argv[j]); exit(EXIT_SUCCESS); }

ZOBACZ TAKŻE

sort(1), alphasort(3), strcmp(3), versionsort(3)

O STRONIE

Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM) <>, Andrzej Krzysztofowicz (PTM) <>, Robert Luberda <> i Michał Kułach <>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 4.07 oryginału.
⇧ Top