getgrnam(3)

NAZWA
getgrnam, getgrnam_r, getgrgid, getgrgid_r - odczytuje wpis z pliku grup

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <sys/types.h>
#include <grp.h>

struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);

int getgrnam_r(const char *restrict name, struct group *restrict grp,
               char buf[restrict .buflen], size_t buflen,
               struct group **restrict result);
int getgrgid_r(gid_t gid, struct group *restrict grp,
               char buf[restrict .buflen], size_t buflen,
               struct group **restrict result);

    Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

getgrnam_r(), getgrgid_r():
    _POSIX_C_SOURCE
        || /* glibc w wersji <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

OPIS
Funkcja getgrnam() zwraca wskaźnik do struktury, zawierającej pola powstałe z rozłożenia tego rekordu z bazy danych o grupach (na przykład z lokalnego pliku grup /etc/group albo z NIS-a lub LDAP-a), który odpowiada grupie o nazwie name.

Funkcja getgrgid() zwraca wskaźnik do struktury, zawierającej pola powstałe z rozłożenia tego rekordu bazy danych o grupach, który odpowiada grupie o identyfikatorze gid.

Struktura group jest następująco zdefiniowana w pliku <grp.h>:

    struct group {
        char   *gr_name;      /* nazwa grupy */
        char   *gr_passwd;    /* hasło grupy */
        gid_t   gr_gid;       /* identyfikator grupy */
        char  **gr_mem;       /* zakończona NULL-em tablica wskaźników
                                 do nazw członków grupy */
    };

Więcej informacji o polach w tej strukturze można znaleźć w podręczniku group(5).

Funkcje getgrnam_r() i getgrgid_r() zwracają te same informacje, co getgrnam() i getgrgid(), ale zapisują pobraną strukturę group w przestrzeni wskazywanej przez argument grp. Pola tekstowe, na które wskazują członkowie struktury group są przekazywane w buforze buf o rozmiarze buflen. W zmiennej *result jest zapisywany wskaźnik do wyniku funkcji (w przypadku powodzenia) lub NULL (jeśli nie znaleziono wpisu w bazie lub gdy wystąpił błąd).

Wywołanie

    sysconf(_SC_GETGR_R_SIZE_MAX)

zwraca albo -1, bez zmieniania wartości errno, albo początkowy sugerowany rozmiar dla bufora buf (jeśli ten rozmiar jest za mały, to opisywane funkcje zwrócą błąd ERANGE - wtedy proces wywołujący powinien spróbować ponownie z większym buforem).

WARTOŚĆ ZWRACANA
Funkcje getgrnam() i getgrgid() zwracają wskaźnik do struktury group albo NULL, jeśli nie znaleziono pasującego wpisu lub gdy wystąpił błąd. W przypadku wystąpienia błędu ustawiają errno, wskazując błąd. Aby móc sprawdzić wartość errno po wywołaniu tych funkcji, należy ją przed wywołaniem ustawić na zero.

Zwrócona wartość może wskazywać na statyczny obszar, który może być nadpisany przez kolejne wywołania getgrent(3), getgrgid() lub getgrnam(). (Zwróconego wskaźnika nie należy przekazywać do funkcji free(3)).

getgrnam_r() i getgrgid_r(), jeśli się powiodą, to zwracają zero i ustawiają *result na grp. Jeśli nie znaleziono pasującego rekordu w bazie haseł, to funkcje zwracają 0 i wpisują NULL do *result. W przypadku błędu zawracany jest numer błędu i *result jest ustawiany na NULL.

BŁĘDY

0 lub ENOENT, lub ESRCH, lub EBADF, lub EPERM, lub ...
    Podany argument name lub gid nie został znaleziony.

EINTR
    Przechwycono sygnał, patrz signal(7).

EIO Błąd wejścia/wyjścia.

EMFILE
    Zostało osiągnięte ograniczenie na liczbę otwartych deskryptorów plików dla procesu.

ENFILE
    Zostało osiągnięte systemowe ograniczenie na całkowitą liczbę otwartych plików.

ENOMEM
    Zabrakło pamięci na przydzielenie struktury group.

ERANGE
    Przekazano niewystarczający bufor.

PLIKI

/etc/group
    lokalny plik bazy grup

ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
Interfejs | Atrybut | Wartość
getgrnam() | Bezpieczeństwo wątkowe | MT-niebezpieczne race:grnam locale
getgrgid() | Bezpieczeństwo wątkowe | MT-niebezpieczne race:grgid locale
getgrnam_r(), getgrgid_r() | Bezpieczeństwo wątkowe | MT-bezpieczne locale

WERSJE
Sformułowania podane w rozdziale „WARTOŚĆ ZWRACANA” pochodzą ze standardu POSIX.1. Nie uwzględnia on jednak sytuacji „nie znaleziono wpisu w bazie” jako błąd i dlatego nie określa, jaką wartość powinno mieć errno w takim przypadku. Jednakże uniemożliwia to rozpoznawanie błędów. Można by dowodzić, że zgodnie ze standardem POSIX errno powinno pozostać niezmienione, jeśli nie znaleziono wpisu. Eksperymentalnie stwierdzono, że różne systemy uniksowe ustawiają różne wartości: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM i być może jeszcze jakieś inne.

STANDARDY
POSIX.1-2008.

HISTORIA
POSIX.1-2001, SVr4, 4.3BSD.

ZOBACZ TAKŻE
endgrent(3), fgetgrent(3), getgrent(3), getpwnam(3), setgrent(3), group(5)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: 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.