- trixie 4.27.0-1
 - trixie-backports 4.28.0-2~bpo13+2
 - testing 4.28.0-2
 - unstable 4.28.0-2
 
| getlogin(3) | Library Functions Manual | getlogin(3) | 
НАИМЕНОВАНИЕ¶
getlogin, getlogin_r, cuserid - возвращает имя пользователя
БИБЛИОТЕКА¶
Стандартная библиотека языка C (libc, -lc)
ОБЗОР¶
#include <unistd.h>
char *getlogin(void); int getlogin_r(char buf[.bufsize], size_t bufsize);
#include <stdio.h>
char *cuserid(char *string);
getlogin_r():
_POSIX_C_SOURCE >= 199506L
cuserid():
Since glibc 2.24:
(_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
|| _GNU_SOURCE
Up to and including glibc 2.23:
_XOPEN_SOURCE
ОПИСАНИЕ¶
Функция getlogin() возвращает указатель на строку, содержащую имя пользователя, вошедшего в систему c терминала, который является управляющим для процесса, или указатель null, если эта информация не может быть получена. Строка выделяется статически и может быть перезаписана при последующих вызовах этой функции или cuserid().
Функция getlogin_r() возвращает то же имя пользователя, но в массиве buf размером bufsize.
Функция cuserid() возвращает указатель на строку, содержащую имя пользователя, связанное с идентификатором эффективного пользователя процесса. Если string не равно указателю null, то значение должно быть массивом, который способен вместить как минимум L_cuserid символов; строка возвращается в этом массиве. В противном случае возвращается указатель на строку в фиксированной области. Эта строка выделена статически и может быть перезаписана при последующих вызовах этой функции или функции getlogin().
Макрос L_cuserid является целочисленной константой, показывающей длину массива, который может понадобиться для хранения имени пользователя. L_cuserid описан в <stdio.h>.
Эти функции позволяют программе точно определить работающего пользователя (cuserid()) или пользователя этого сеанса (getlogin()) (значения могут различаться, если у программы установлен бит set-user-ID).
В большинстве случаев для определения пользователя полезнее использовать переменную окружения LOGNAME, потому что пользователь может установить LOGNAME каким угодно.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
getlogin() returns a pointer to the username when successful, and NULL on failure, with errno set to indicate the error. getlogin_r() returns 0 when successful, and nonzero on failure.
ОШИБКИ¶
В POSIX определены:
- EMFILE
 - Было достигнуто ограничение по количеству открытых файловых дескрипторов на процесс.
 - ENFILE
 - Достигнуто максимальное количество открытых файлов в системе.
 - ENXIO
 - У вызывающего процесса нет управляющего терминала.
 - ERANGE
 - (getlogin_r) The length of the username, including the terminating null byte ('\0'), is larger than bufsize.
 
В Linux/glibc также есть:
ФАЙЛЫ¶
- /etc/passwd
 - файл, содержащий базу паролей
 - /var/run/utmp
 - (обычно, /etc/utmp; в некоторых версиях libc используется /var/adm/utmp)
 
АТРИБУТЫ¶
Описание терминов данного раздела смотрите в attributes(7).
| Интерфейс | Атрибут | Значение | 
| getlogin() | Безвредность в нитях | MT-Unsafe race:getlogin race:utent sig:ALRM timer locale | 
| getlogin_r() | Безвредность в нитях | MT-Unsafe race:utent sig:ALRM timer locale | 
| cuserid() | Безвредность в нитях | MT-Unsafe race:cuserid/!string locale | 
В приведённой выше таблице utent в race:utent означает, что если любая из функций setutent(3), getutent(3) или endutent(3) используется одновременно в нескольких нитях программы, то может возникнуть состязательность по данным. Эти функции вызываются из getlogin() и getlogin_r() поэтому мы используем race:utent для напоминания.
ВЕРСИИ¶
В OpenBSD имеются getlogin() и setlogin(), а имя пользователя связывается с сеансом даже если не имеется управляющего терминала.
СТАНДАРТЫ¶
- getlogin()
 - getlogin_r()
 - POSIX.1-2008.
 - cuserid()
 - Отсутствуют.
 
СТАНДАРТЫ¶
- getlogin()
 - getlogin_r():
 - POSIX.1-2001. OpenBSD.
 - cuserid()
 - System V, POSIX.1-1988. Removed in POSIX.1-1990. SUSv2. Removed in POSIX.1-2001.
 
- System V has a cuserid() function which uses the real user ID rather than the effective user ID.
 
ОШИБКИ¶
К сожалению, зачастую довольно просто «обмануть» getlogin(). Иногда она вообще не работает из-за того, что какая-то программа испортила содержимое файла utmp. Часто функция возвращает только первые 8 символов имени. Пользователь, вошедший в систему с терминала, который является управляющим для нашей программы, необязательно будет пользователем, запустившим программу. Избегайте использования getlogin() из соображений безопасности.
Заметим, что glibc не следует спецификации POSIX и использует stdin вместо /dev/tty. Дефект ( в других современных системах, например SunOS 5.8, HP-UX 11.11 и FreeBSD 4.8, также возвращают имя пользователя если было перенаправление stdin).
Никто точно не знает что делает cuserid(), поэтому не используйте её в переносимых программах. Вместо неё используйте getpwuid(geteuid()), если это необходимо. Не используйте cuserid().
СМОТРИТЕ ТАКЖЕ¶
ПЕРЕВОД¶
Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 15 июня 2024 г. | Справочные страницы Linux 6.9.1 |