GETPWENT.3
上传用户:jnzhq888
上传日期:2007-01-18
资源大小:51694k
文件大小:3k
源码类别:

操作系统开发

开发平台:

WINDOWS

  1. .TH GETPWENT 3
  2. .SH NAME
  3. getpwent, getpwnam, getpwuid, setpwent, endpwent, setpwfile - password file routines
  4. .SH SYNOPSIS
  5. .ft B
  6. .nf
  7. #include <pwd.h>
  8. struct passwd *getpwent(void)
  9. struct passwd *getpwnam(const char *fInamefP)
  10. struct passwd *getpwuid(uid_t fIuidfP)
  11. int setpwent(void)
  12. void endpwent(void)
  13. void setpwfile(const char *fIfilefP)
  14. .fi
  15. .ft P
  16. .SH DESCRIPTION
  17. These functions are used to obtain information from the password file.  They
  18. return this information in a
  19. .B struct passwd
  20. as defined by <pwd.h>:
  21. .PP
  22. .nf
  23. .ta +4n +6n +15n
  24. struct passwd {
  25. char *pw_name; /* login name */
  26. char *pw_passwd; /* encrypted password */
  27. uid_t pw_uid; /* numeric user id */
  28. gid_t pw_gid; /* numeric group id */
  29. char *pw_gecos; /* user full name and other info */
  30. char *pw_dir; /* user's home directory */
  31. char *pw_shell; /* name of the user's shell */
  32. };
  33. .fi
  34. .PP
  35. .B Getpwent()
  36. reads the password file entry by entry.
  37. .B Getpwnam()
  38. scans the entire password file for the user with the given
  39. .IR name .
  40. .B Getpwuid()
  41. looks for the first user with the given
  42. .IR uid .
  43. The
  44. .B setpwent()
  45. and
  46. .B endpwent()
  47. functions are used to open and later close the password file.  With
  48. .B setpwfile()
  49. one can specify the file to read other than the normal password file.  This
  50. only sets the name, the next
  51. .B setpwent()
  52. call will open the file.  Do not touch the file name while it is active.
  53. Use
  54. .B setpwfile(NULL)
  55. to revert back to the normal password file.
  56. .PP
  57. The usual way to scan the password file is (error checking omitted):
  58. .PP
  59. .RS
  60. .nf
  61. .DT
  62. setpwent();
  63. while ((pw = getpwent()) != NULL)
  64. if (appropriate_test(pw)) break;
  65. endpwent();
  66. .fi
  67. .RE
  68. .PP
  69. The
  70. .B pw
  71. variable contains the entry that is wanted if non-NULL.  The
  72. .B getpwnam()
  73. and
  74. .B getpwuid()
  75. functions are implemented as in this example, with error checking of course.
  76. .PP
  77. .B Getpwent()
  78. calls
  79. .B setpwent()
  80. if this has not yet been done.
  81. .B Setpwent()
  82. first calls
  83. .B endpwent()
  84. if the password file is still open.  (Other implementations may simply
  85. rewind the file.)
  86. .SH FILES
  87. .TP 15
  88. .B /etc/passwd
  89. The password file database.
  90. .SH "SEE ALSO"
  91. .BR cuserid (3),
  92. .BR getlogin (3),
  93. .BR getgrent (3),
  94. .BR passwd (5).
  95. .SH DIAGNOSTICS
  96. .B Setpwent()
  97. has the same return value and error codes as the
  98. .BR open (2)
  99. call it uses to open the password file.  The
  100. .BI get xxx ()
  101. functions return NULL on end of file, entry not found, or error.  You can
  102. set
  103. .B errno
  104. to zero before the call and check it after.
  105. .SH NOTES
  106. All
  107. .BI get xxx ()
  108. routines return a pointer to static storage that is overwritten in each call.
  109. .PP
  110. Only
  111. .B getpwnam()
  112. and
  113. .B getpwuid()
  114. are defined by s-2POSIXs+2.  The
  115. .B _MINIX_SOURCE
  116. macro must be defined before including <pwd.h> to make the other functions
  117. visible.  The
  118. .B pw_passwd
  119. and
  120. .B pw_gecos
  121. fields are also not defined by s-2POSIXs+2, but are always visible.
  122. Portable code cannot reliably detect errors by setting
  123. .B errno
  124. to zero.  Under Minix it is better to make a
  125. .B getpwent()
  126. scan if you need to look up several user-id's or names, but portable code
  127. had better use several
  128. .B getpwuid()
  129. or
  130. .B getpwnam()
  131. calls.  The
  132. .B getpwent()
  133. is usually available on other systems, but may be very expensive.
  134. .SH AUTHOR
  135. Kees J. Bot (kjb@cs.vu.nl)