如何从用户标识中检索用户名

Com*_*org 7 c unix file-descriptor system-calls stat

我正在从一本书中学习,在Unix上实现(ls)命令.在使用(-l)标志执行(ls)命令的编码部分期间,我看到我必须提示文件的用户名和组名.到目前为止,我有以下几行中的用户和组ID:

struct stat statBuf;

statBuf.st_uid; //For the user id. 
statBuf.st_gid; //For the group id. 
Run Code Online (Sandbox Code Playgroud)

在Unix上的默认(ls)命令中,打印文件的信息的方式是显示用户名而不是用户ID.

任何人都可以帮我找到正确的方法来从他们的ID中检索用户名和组名吗?

Don*_*ows 16

您可以使用getpwuid查找特定UID(包括用户名,但现在不是密码本身)的密码getgrgid文件条目,并查找特定GID的组文件条目.

  • 我认为阅读这两个函数的手册页会告诉你你需要知道的其余部分...... (2认同)

小智 6

检查我的用户名代码:

#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>

string getUser(uid_t uid)
{
    struct passwd *pws;
    pws = getpwuid(uid);
        return pws->pw_name;
}
Run Code Online (Sandbox Code Playgroud)

对于组名,您可以使用 getgrgid。

  • 您的示例有一些缺陷:C 中没有 `string` 类型。并且您没有检查在 `uid` 未知的情况下可能返回的 `NULL` 指针。除此之外,本质上与 Donal Fellows 的回答中建议的功能集相同。 (2认同)