gpt4 book ai didi

c - 为什么 getpwnam() 总是在函数中返回根信息?

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:12 25 4
gpt4 key购买 nike

我编写了一个简单的程序,它在用户名上调用 getpwnam(),将该用户名传递给一个函数,然后再次调用 getpwnam()。出于某种原因,我总是在函数中获取 root 的密码信息。

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

void printuser(char *username) {
printf("USERNAME2: %s\n", username);
struct passwd *user_info = getpwnam(username);
printf("USERNAME3: %s\n", username);
printf("USERNAME4: %s\n", user_info->pw_name);
}

int main(int argc, char *argv[]) {
struct passwd *user_info = getpwnam(argv[1]);
printf("USERNAME1: %s\n", user_info->pw_name);
printuser(user_info->pw_name);
printf("USERNAME5: %s\n", user_info->pw_name);
}

程序总是产生以下输出:

$ ./test_getpwnam chenxiaolong
USERNAME1: chenxiaolong
USERNAME2: chenxiaolong
USERNAME3: root
USERNAME4: root
USERNAME5: root

我在手册页中找不到与此相关的任何内容。我做错了什么吗?

提前致谢!

最佳答案

The return value may point to a static area which is overwritten by a subsequent call to getpwent(), getpwnam(), or getpwuid().

http://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwnam.html

特别是,无法保证读取/写入的顺序,因此将 getpwnam 返回的数据传递回 getpwnam 是不安全的。

你真的根本不应该使用 getpwnam;请改用 getpwnam_r

关于c - 为什么 getpwnam() 总是在函数中返回根信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12664456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com