Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


getpwnam(3) — Linux manual page

NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |FILES |ATTRIBUTES |VERSIONS |STANDARDS |HISTORY |NOTES |EXAMPLES |SEE ALSO |COLOPHON

getpwnam(3)              Library Functions Manualgetpwnam(3)

NAME        top

       getpwnam, getpwnam_r, getpwuid, getpwuid_r - get password file       entry

LIBRARY        top

       Standard C library (libc,-lc)

SYNOPSIS        top

#include <sys/types.h>#include <pwd.h>struct passwd *getpwnam(const char *name);struct passwd *getpwuid(uid_tuid);int getpwnam_r(size_t size;const char *restrictname, struct passwd *restrictpwd,charbuf[restrictsize], size_tsize,struct passwd **restrictresult);int getpwuid_r(size_t size;uid_tuid, struct passwd *restrictpwd,charbuf[restrictsize], size_tsize,struct passwd **restrictresult);   Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):getpwnam_r(),getpwuid_r():           _POSIX_C_SOURCE               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIPTION        top

       Thegetpwnam() function returns a pointer to a structure       containing the broken-out fields of the record in the password       database (e.g., the local password file/etc/passwd, NIS, and       LDAP) that matches the usernamename.       Thegetpwuid() function returns a pointer to a structure       containing the broken-out fields of the record in the password       database that matches the user IDuid.       Thepasswd structure is defined in<pwd.h> as follows:           struct passwd {               char   *pw_name;       /* username */               char   *pw_passwd;     /* user password */               uid_t   pw_uid;        /* user ID */               gid_t   pw_gid;        /* group ID */               char   *pw_gecos;      /* user information */               char   *pw_dir;        /* home directory */               char   *pw_shell;      /* shell program */           };       Seepasswd(5) for more information about these fields.       Thegetpwnam_r() andgetpwuid_r() functions obtain the same       information asgetpwnam() andgetpwuid(), but store the retrievedpasswd structure in the space pointed to bypwd.  The string       fields pointed to by the members of thepasswd structure are       stored in the bufferbuf of sizesize.  A pointer to the result       (in case of success) or NULL (in case no entry was found or an       error occurred) is stored in*result.       The call           sysconf(_SC_GETPW_R_SIZE_MAX)       returns either -1, without changingerrno, or an initial suggested       size forbuf.  (If this size is too small, the call fails withERANGE, in which case the caller can retry with a larger buffer.)

RETURN VALUE        top

       Thegetpwnam() andgetpwuid() functions return a pointer to apasswd structure, or NULL if the matching entry is not found or an       error occurs.  If an error occurs,errno is set to indicate the       error.  If one wants to checkerrno after the call, it should be       set to zero before the call.       The return value may point to a static area, and may be       overwritten by subsequent calls togetpwent(3),getpwnam(), orgetpwuid().  (Do not pass the returned pointer tofree(3).)       On success,getpwnam_r() andgetpwuid_r() return zero, and set*result topwd.  If no matching password record was found, these       functions return 0 and store NULL in*result.  In case of error,       an error number is returned, and NULL is stored in*result.

ERRORS        top

0orENOENTorESRCHorEBADForEPERMor ...              The givenname oruid was not found.EINTRA signal was caught; seesignal(7).EIOI/O error.EMFILEThe per-process limit on the number of open file              descriptors has been reached.ENFILEThe system-wide limit on the total number of open files has              been reached.ENOMEMInsufficient memory to allocatepasswd structure.ERANGEInsufficient buffer space supplied.

FILES        top

/etc/passwd              local password database file

ATTRIBUTES        top

       For an explanation of the terms used in this section, seeattributes(7).       ┌───────────────┬───────────────┬────────────────────────────────┐       │InterfaceAttributeValue│       ├───────────────┼───────────────┼────────────────────────────────┤       │getpwnam()    │ Thread safety │ MT-Unsafe race:pwnam locale    │       ├───────────────┼───────────────┼────────────────────────────────┤       │getpwuid()    │ Thread safety │ MT-Unsafe race:pwuid locale    │       ├───────────────┼───────────────┼────────────────────────────────┤       │getpwnam_r(), │ Thread safety │ MT-Safe locale                 │       │getpwuid_r()  │               │                                │       └───────────────┴───────────────┴────────────────────────────────┘

VERSIONS        top

       Thepw_gecos field is not specified in POSIX, but is present on       most implementations.

STANDARDS        top

       POSIX.1-2008.

HISTORY        top

       POSIX.1-2001, SVr4, 4.3BSD.

NOTES        top

       The formulation given above under "RETURN VALUE" is from       POSIX.1-2001.  It does not call "not found" an error, and hence       does not specify what valueerrno might have in this situation.       But that makes it impossible to recognize errors.  One might argue       that according to POSIXerrno should be left unchanged if an entry       is not found.  Experiments on various UNIX-like systems show that       lots of different values occur in this situation: 0, ENOENT,       EBADF, ESRCH, EWOULDBLOCK, EPERM, and probably others.       Thepw_dir field contains the name of the initial working       directory of the user.  Login programs use the value of this field       to initialize theHOMEenvironment variable for the login shell.       An application that wants to determine its user's home directory       should inspect the value ofHOME(rather than the valuegetpwuid(getuid())->pw_dir) since this allows the user to modify       their notion of "the home directory" during a login session.  To       determine the (initial) home directory of another user, it is       necessary to usegetpwnam("username")->pw_dir or similar.

EXAMPLES        top

       The program below demonstrates the use ofgetpwnam_r() to find the       full username and user ID for the username supplied as a command-       line argument.       #include <errno.h>       #include <pwd.h>       #include <stdint.h>       #include <stdio.h>       #include <stdlib.h>       #include <unistd.h>       int       main(int argc, char *argv[])       {           struct passwd pwd;           struct passwd *result;           char *buf;           long bufsize;           int s;           if (argc != 2) {               fprintf(stderr, "Usage: %s username\n", argv[0]);               exit(EXIT_FAILURE);           }           bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);           if (bufsize == -1)          /* Value was indeterminate */               bufsize = 16384;        /* Should be more than enough */           buf = malloc(bufsize);           if (buf == NULL) {               perror("malloc");               exit(EXIT_FAILURE);           }           s = getpwnam_r(argv[1], &pwd, buf, bufsize, &result);           if (result == NULL) {               if (s == 0)                   printf("Not found\n");               else {                   errno = s;                   perror("getpwnam_r");               }               exit(EXIT_FAILURE);           }           printf("Name: %s; UID: %jd\n", pwd.pw_gecos,                  (intmax_t) pwd.pw_uid);           exit(EXIT_SUCCESS);       }

SEE ALSO        top

endpwent(3),fgetpwent(3),getgrnam(3),getpw(3),getpwent(3),getspnam(3),putpwent(3),setpwent(3),passwd(5)

COLOPHON        top

       This page is part of theman-pages (Linux kernel and C library       user-space interface documentation) project.  Information about       the project can be found at        ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report       for this manual page, see       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.       This page was obtained from the tarball man-pages-6.15.tar.gz       fetched from       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on       2025-08-11.  If you discover any rendering problems in this HTML       version of the page, or you believe there is a better or more up-       to-date source for the page, or you have corrections or       improvements to the information in this COLOPHON (which isnot       part of the original manual page), send a mail to       man-pages@man7.orgLinux man-pages 6.15            2025-06-28getpwnam(3)

Pages that refer to this page:capsh(1)getent(1)gitweb(1)strace(1)chown(2)fgetpwent(3)getgrent_r(3)getgrnam(3)getpw(3)getpwent(3)getpwent_r(3)getspnam(3)getutent(3)id_t(3type)pmsetprocessidentity(3)putpwent(3)org.freedesktop.home1(5)passwd(5)passwd(5@@shadow-utils)nscd(8)sulogin(8)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp