为什么getpwnam()总是在函数中返回根信息?
我编写了一个简单的程序,在用户名上调用getpwnam()
,将该用户名传递给函数,然后再次调用getpwnam()
。 出于某种原因,我总是在函数内部获取root的passwd信息。
#include #include #include 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
我在与此相关的手册页中找不到任何内容。 有什么我做错了吗?
提前致谢!
返回值可能指向静态区域,该区域被后续调用getpwent(),getpwnam()或getpwuid()覆盖。
http://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwnam.html
特别是,无法保证读/写的顺序,因此将从getpwnam
返回的数据传递回getpwnam
是getpwnam
。
你根本不应该使用getpwnam
; 请改用getpwnam_r
。