oracular (3) qsort_r.3.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       qsort, qsort_r - sortuje tablicę

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <stdlib.h>

       void qsort(void base[.size * .nmemb], size_t nmemb, size_t size,
                  int (*compar)(const void [.size], const void [.size]));
       void qsort_r(void base[.size * .nmemb], size_t nmemb, size_t size,
                  int (*compar)(const void [.size], const void [.size], 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ą.

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

       ┌───────────────────────────────────────────────────────────────┬────────────────────────┬───────────────┐
       │InterfejsAtrybutWartość       │
       ├───────────────────────────────────────────────────────────────┼────────────────────────┼───────────────┤
       │qsort(), qsort_r()                                             │ Bezpieczeństwo wątkowe │ MT-bezpieczne │
       └───────────────────────────────────────────────────────────────┴────────────────────────┴───────────────┘

STANDARDY

       qsort()
              C11, POSIX.1-2008.

HISTORIA

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

       qsort_r()
              glibc 2.8.

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ŁADY

       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(*(const char **) p1, *(const char **) p2);
       }

       int
       main(int argc, char *argv[])
       {
           if (argc < 2) {
               fprintf(stderr, "Użycie: %s <łańcuch>...\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);

           for (size_t j = 1; j < argc; j++)
               puts(argv[j]);
           exit(EXIT_SUCCESS);
       }

ZOBACZ TAKŻE

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

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Przemek  Borys  <pborys@dione.ids.pl>,
       Andrzej  Krzysztofowicz  <ankry@green.mf.pg.gda.pl>,  Robert  Luberda <robert@debian.org> i Michał Kułach
       <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje  o  warunkach  licencji  można  uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej  ⟨manpages-pl-
       list@lists.sourceforge.net⟩.