Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       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);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       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 также есть:

       ENOENT Нет соответствующей записи в файле utmp.

       ENOMEM Недостаточно памяти для выделения под структуру passwd.

       ENOTTY Стандартный ввод не ссылается на терминал (смотрите ДЕФЕКТЫ).

ФАЙЛЫ

       /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().

СМОТРИТЕ ТАКЖЕ

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

ПЕРЕВОД

       Русский  перевод  этой  страницы  руководства  разработал(и) 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  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  15 июня 2024 г.                                     getlogin(3)