c - 在c中使用getpwuid()检索文件的所有者名称总是抛出root

标签 c linux getpwuid

嗨,当我以 root 身份登录 Linux 系统并尝试使用 getpwuid() 获取文件的所有者名称时,它总是显示 root(lie) 而不是实际的所有者名称,下面是我的代码。 请帮助我获取实际名称而不是 root。

int main(int argc, char *argv[])
{
        register struct passwd *access;
        register uid_t uid;
        int c;

        uid = geteuid ();
        access= getpwuid (uid);
        if (access)
        {
                puts (access->pw_name);
                exit (EXIT_SUCCESS);
        }
        fprintf (stderr,"%s: cannot find username for UID %u\n",
                        _PROGRAM_NAME, (unsigned) uid);
        exit (EXIT_FAILURE);

}

我总是以 root 身份获取用户名,我怎样才能获得所有者的实际名称?

最佳答案

geteuid() 获取进程当前运行的有效用户 ID。由于您以 root 身份登录,因此将返回 UID 0,并且 getpwuid() 将正确告诉您这是 root。

如果你想获取文件的所有者,为什么要使用geteuid()?您需要调用 stat() 系列中的函数来获取该信息。

关于c - 在c中使用getpwuid()检索文件的所有者名称总是抛出root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890587/

相关文章:

c - 如何修复构建 Linux 内核时出现的链接错误?

javascript - 使用 Electron 调用 app.quit() 函数的 HTML 按钮

c - 使用 readdir_r 读取目录中的文件并使用 qsort 排序

c - getpwnam 的奇怪行为

objective-c - si_user_byuid/getpwuid 中的内存泄漏源自 iOS 中的 CPSharedResourcesDirectory

c - null 终止字符串数组

c - 使用 pthreads 的段错误

linux - linux 中终止 tcp 连接或 session 的命令是什么?

c - fork 后重新创建死线程

linux - 加载我自己的内核模块时出现未知符号