Почему getpwnam() всегда возвращает корневую информацию в функции?
Я написал простую программу, которая вызывает getpwnam()
на имя пользователя, передает это имя пользователя в функцию, а затем вызывает getpwnam()
снова. По какой-то причине я всегда получаю информацию о passwd для 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
Я не могу найти что-либо на странице руководства, связанной с этим. Я что-то не так делаю?
Заранее спасибо!
1 ответ
Возвращаемое значение может указывать на статическую область, которая перезаписывается последующим вызовом getpwent(), getpwnam() или getpwuid ().
http://pubs.opengroup.org/onlinepubs/9699919799/functions/getpwnam.html
В частности, нет никакой гарантии относительно порядка чтения / записи, поэтому небезопасно передавать данные, возвращенные из getpwnam
вернуться к getpwnam
,
Вы действительно не должны использовать getpwnam
совсем; использование getpwnam_r
вместо.