侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

getgrnam函数用法详解

noerror
2022-11-09 / 0 评论 / 0 点赞 / 147 阅读 / 926 字 / 正在检测是否收录...

getgrnam函数用法详解

getgrnam函数简介

  • 头文件包含
#include <sys/types.h>
#include <grp.h>
  • 函数定义
struct group *getgrnam(const char * name );
struct group *getgrgid(gid_t  gid );
int getgrnam_r(const char * name , struct group * grp ,
          char * buf , size_t  buflen , struct group ** result );
int getgrgid_r(gid_t  gid , struct group * grp ,
          char * buf , size_t  buflen , struct group ** result );

getgrnam函数常见使用错误

  • 编译错误
    warning: implicit declaration of function ‘getgrnam’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <sys/types.h>
#include <grp.h>

getgrnam函数详细描述

getgrnam ()函数返回一个指向结构的指针,该结构包含组数据库(例如本地组文件/etc/group NIS和LDAP)中与组名name 匹配的记录的分段字段
getgrgid ()函数返回一个指向结构的指针,该结构包含组数据库中与组ID gid 匹配的记录的分段字段
中的group结构定义如下:

struct group {
   char   *gr_name;        /* group name */
   char   *gr_passwd;      /* group password */
   gid_t   gr_gid;         /* group ID */
   char  **gr_mem;         /* NULL-terminated array of pointers
                              to names of group members */
};

有关此结构的字段的更多信息,请参见group (5)
getgrnam_r ()和getgrgid_r ()函数获得与getgrnam ()和getgrgid ()相同的信息,但是将检索到的group结构存储在grp 所指向的空间中。group结构的成员所指向的字符串字段存储在大小为buflen 的缓冲区buf中。指向结果(在成功的情况下)或NULL(在没有找到条目或发生错误的情况下)的指针存储在*result 中
电话
sysconf(_SC_GETGR_R_SIZE_MAX)
返回-1,而不更改errno 或buf 的初始建议大小(如果该大小太小,则调用失败,使用ERANGE ,在这种情况下,调用方可以使用更大的缓冲区重试。)

getgrnam函数返回值

getgrnam ()和getgrgid ()函数返回指向group结构的指针,如果找不到匹配的条目或发生错误,则返回NULL。如果出现错误,则适当设置errno。如果想在调用后检查errno,应该在调用前将其设置为零。
返回值可能指向静态区域,并且可能被对getgrent (3)、getgrgid ()或getgrnam ()的后续调用覆盖(不要将返回的指针传递给free (3))
成功时,getgrnam_r ()和getgrgid_r ()返回零,如果没有找到匹配的组记录,则将result设置为grp ,如果出现错误,则返回0,并在result 中存储NULL,返回错误号,在*result 中存储NULL

getgrnam函数错误码

  • 0 " or " ENOENT " or " ESRCH " or " EBADF " or " EPERM " or "找不到给定的name或gid。
  • EINTR 捕获了一个信号;参见signal (7)
  • EIO I/O错误。
  • EMFILE 已达到每个进程打开的文件描述符的数量限制。
  • ENFILE 已达到系统范围内打开文件总数的限制。
  • ENOMEM 内存不足,无法分配group结构。
  • ERANGE 提供的缓冲区空间不足。

getgrnam函数其他说明

上面“返回值”下给出的公式来自POSIX.1。它不会将“未找到”称为错误,因此不会指定errno在这种情况下可能具有的值。但这使得识别错误变得不可能。有人可能会说,根据POSIX,如果找不到条目,errno应该保持不变。在各种类UNIX系统上的实验表明,在这种情况下会出现许多不同的值:0、ENOENT、EBADF、ESRCH、EWOULDBLOCK、EPERM,可能还有其他值。

0

评论区