Provided by: manpages-pl-dev_0.6-2_all bug

NAZWA

       getlogin, getlogin_r, cuserid  - odczytanie nazwy użytkownika

SKŁADNIA

       #include <unistd.h>

       char *getlogin(void);
       int getlogin_r(char *buf, size_t bufsize);

       #include <stdio.h>

       char *cuserid(char *string);

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

       getlogin_r(): _REENTRANT || _POSIX_C_SOURCE >= 199506L
       cuserid(): _XOPEN_SOURCE

OPIS

       getlogin() zwraca wskaźnik do napisu zawierającego nazwę użytkownika zalogowanego na terminalu sterującym
       procesu  lub  wskaźnik  null,  jeśli nie można tej informacji określić. Napis jest alokowany statycznie i
       może zostać nadpisany przez późniejsze wywołanie tej funkcji lub funkcji cuserid().

       getlogin_r() zwraca tę samą nazwę użytkownika w tablicy buf o rozmiarze bufsize.

       cuserid()  zwraca  wskaźnik  do  napisu  zawierającego  nazwę  użytkownika  skojarzonego   z   efektywnym
       identyfikatorem  użytkownika  procesu.  Jeśli  string nie jest wskaźnikiem null, to powinien być tablicą,
       która może pomieścić co najmniej L_cuserid znaków; napis  jest  zwracany  w  tej  tablicy.  W  przeciwnym
       przypadku,  zwracany  jest  wskaźnik  do  napisu  w  obszarze  pamięci  statycznej.  Napis jest alokowany
       statycznie i może zostać nadpisany przez późniejsze wywołania tej funkcji lub funkcji getlogin().

       Makro L_cuserid jest stałą całkowitą określającą, jaka duża tablica może być  potrzebna  do  przechowania
       nazwy użytkownika. L_cuserid jest zadeklarowane w <stdio.h>.

       Funkcje  te pozwalają programowi pozytywnie zidentyfikować użytkownika, na prawach którego działa program
       (cuserid()) lub użytkownika zalogowanego w danej sesji (getlogin(). (Mogą to być różni  użytkownicy,  gdy
       wchodzą w grę programy z ustawionym bitem set-user-ID).

       W  większości  zastosowań,  bardziej przydatne dla określenia, kim jest użytkownik, jest posługiwanie się
       zmienną środowiskową LOGNAME. Jest to bardziej elastyczne, właśnie dlatego, że użytkownik  może  dowolnie
       ustawić LOGNAME.

WARTOŚĆ ZWRACANA

       getlogin() po pomyślnym zakończeniu zwraca wskaźnik do nazwy użytkownika. W przypadku błędu zwracany jest
       NULL,a  errno  jest ustawiane na wartość wskazującą na rodzaj błędu. getlogin_r() zwraca 0, jeśli skończy
       się sukcesem, lub wartość niezerową, gdy wystąpi błąd.

BŁĘDY

       POSIX określa:

       EMFILE Proces wywołujący osiągnął już maksymalną dopuszczalną liczbę otwartych plików.

       ENFILE System osiągnął już maksymalną dopuszczalną liczbę otwartych plików.

       ENXIO  Proces wywołujący nie ma przypisanego terminala sterującego.

       ERANGE (getlogin_r) Długość nazwy użytkownika, łącznie z końcowym znakiem null, ("\0") jest  większa  niż
              bufsize.

       Linuksowe glibc zwraca także:

       ENOENT Brak odpowiedniego wpisu w pliku utmp.

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

       ENOTTY Standardowe wejście nie odnosi się do terminala (patrz BŁĘDY IMPLEMENTACJI).

PLIKI

       /etc/passwd
              plik bazy danych z hasłami

       /var/run/utmp
              (tradycyjnie /etc/utmp; niektóre wersje libc używały /var/adm/utmp)

ATRYBUTY

   Wielowątkowość (patrz pthreads(7))
       Funkcja getlogin() nie jest bezpieczna dla wątków.

       Funkcja getlogin_r() jest bezpieczna dla wątków.

       Funkcja cuserid() jest bezpieczna dla wątków z wyjątkiem sytuacji, gdy jest wywoływana z parametrem NULL.

ZGODNE Z

       getlogin() i getlogin_r() są opisane w POSIX.1-2001.

       System  V  zawiera funkcję cuserid(), która posługuje się raczej rzeczywistym identyfikatorem użytkownika
       niż efektywnym identyfikatorem użytkownika. Funkcję cuserid() włączono w wersji POSIX z  roku  1988,  ale
       usunięto ją w wersji z roku 1990. Była obecna w SUSv2, ale została usunięta w POSIX.1-2001.

       OpenBSD  ma  getlogin()  i  setlogin()  oraz nazwę użytkownika powiązanego z sesją, nawet jeśli nie ma on
       terminala sterującego.

BŁĘDY IMPLEMENTACJI

       Na nieszczęście, raczej łatwo jest ogłupić getlogin(). Czasem nie działa ona wcale,  gdyż  jakiś  program
       namieszał  w  pliku  utmp.  Często zwraca jedynie pierwszych 8 znaków nazwy logowania. Ponadto użytkownik
       obecnie zalogowany na terminalu sterującym  programu  nie  musi  być  użytkownikiem,  który  ten  program
       uruchomił. Ze względów związanych z bezpieczeństwem, należy unikać getlogin().

       Proszę  zauważyć,  że  glibc  nie przestrzega wymagań POSIX i używa stdin zamiast /dev/tty. Jest to błąd.
       (Inne nowe systemy, takie jak SunOS  5.8,  HP-UX  11.11  i  FreeBSD  4.8,  zwracają  nazwę   zalogowanego
       użytkownika także wtedy, gdy stdin został przekierowany).

       Nikt dokładnie nie wie, co robi cuserid(); należy jej unikać w przenośnych programach. W ogóle należy jej
       unikać  i  używać  zamiast  niej getpwuid(geteuid()), jeśli jest to to, czego potrzeba. Nie należy używać
       cuserid().

ZOBACZ TAKŻE

       geteuid(2), getuid(2), utmp(5)

O STRONIE

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

TŁUMACZENIE

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

       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ą  3.71 oryginału.

GNU                                                2013-04-19                                        GETLOGIN(3)