.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
.\"     386BSD man pages
.\" Modified Mon Mar 29 22:41:16 1993, David Metcalfe
.\" Modified Sat Jul 24 21:35:16 1993, Rik Faith (faith@cs.unc.edu)
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH bsearch 3 "5 lutego 2023 r." "Linux man\-pages 6.03" 
.SH NAZWA
bsearch \- binarnie przeszukuje posortowaną tablicę
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <stdlib.h>\fP
.PP
\fBvoid *bsearch(const void \fP\fIkey\fP\fB[.\fP\fIsize\fP\fB], const void \fP\fIbase\fP\fB[.\fP\fIsize\fP\fB * .\fP\fInmemb\fP\fB],\fP
\fB              size_t \fP\fInmemb\fP\fB, size_t \fP\fIsize\fP\fB,\fP
\fB              int (*\fP\fIcompar\fP\fB)(const void [.\fP\fIsize\fP\fB], const void [.\fP\fIsize\fP\fB]));\fP
.fi
.SH OPIS
Funkcja \fBbsearch\fP() przeszukuje tablicę obiektów \fInmemb\fP, której pierwszy
element jest wskazywany przez \fIbase\fP, w poszukiwaniu elementu pasującego do
obiektu wskazywanego przez \fIkey\fP. Rozmiar każdego z elementów tablicy
określony jest przez \fIsize\fP.
.PP
Zawartość tablicy powinna być posortowana w kolejności rosnącej zgodnie z
funkcją porównawczą wskazywaną przez \fIcompar\fP. Funkcja \fIcompar\fP powinna
przyjmować dwa argumenty: wskaźnik do obiektu \fIkey\fP oraz do elementu
tablicy i powinna zwracać liczbę całkowitą mniejszą od zera, równą zeru lub
większą niż zero, jeśli obiekt \fIkey\fP okazał się, odpowiednio, mniejszy,
równy lub większy niż element tablicy.
.SH "WARTOŚĆ ZWRACANA"
Funkcja \fBbsearch\fP() zwraca wskaźnik do pasującego elementu tablicy lub
NULL, jeśli nie znaleziono takiego elementu. Jeśli istnieje więcej takich
elementów, to nie jest określone, na który element będzie wskazywać zwrócony
wskaźnik.
.SH ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku
\fBattributes\fP(7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interfejs	Atrybut	Wartość
T{
\fBbsearch\fP()
T}	Bezpieczeństwo wątkowe	MT\-bezpieczne
.TE
.hy
.ad
.sp 1
.SH STANDARDY
POSIX.1\-2001, POSIX.1\-2008, C99, SVr4, 4.3BSD.
.SH PRZYKŁADY
Poniższy przykład najpierw sortuje tablicę struktur, używając \fBqsort\fP(3), a
następnie pobiera żądane elementy, używając \fBbsearch\fP().
.PP
.\" SRC BEGIN (bsearch.c)
.EX
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ARRAY_SIZE(arr)  (sizeof((arr)) / sizeof((arr)[0]))

struct mi {
    int         nr;
    const char  *name;
};

static struct mi  months[] = {
    { 1, "sty" }, { 2, "lut" }, { 3, "mar" }, { 4, "kwi" },
    { 5, "maj" }, { 6, "cze" }, { 7, "lip" }, { 8, "sie" },
    { 9, "wrz" }, {10, "paz" }, {11, "lis" }, {12, "gru" }
};

static int
compmi(const void *m1, const void *m2)
{
    const struct mi *mi1 = m1;
    const struct mi *mi2 = m2;

    return strcmp(mi1\->name, mi2\->name);
}

int
main(int argc, char *argv[])
{
    qsort(months, ARRAY_SIZE(months), sizeof(months[0]), compmi);
    for (size_t i = 1; i < argc; i++) {
        struct mi key;
        struct mi *res;

        key.name = argv[i];
        res = bsearch(&key, months, ARRAY_SIZE(months),
                      sizeof(months[0]), compmi);
        if (res == NULL)
            printf("\[aq]%s\[aq]: nieznany miesiąc\en", argv[i]);
        else
            printf("%s: miesiąc #%d\en", res\->name, res\->nr);
    }
    exit(EXIT_SUCCESS);
}
.EE
.\" SRC END
.SH "ZOBACZ TAKŻE"
\fBhsearch\fP(3), \fBlsearch\fP(3), \fBqsort\fP(3), \fBtsearch\fP(3)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Adam Byrtek <alpha@irc.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .