GETGRENT.3
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:3k
源码类别:

操作系统开发

开发平台:

C/C++

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