首先说一下什么是getpw系列函数,它主要是指这些函数: 这些函数根据一个用户名(getpwnam和getpwnam_r两个函数)或者一个用户ID(getpwuid和getpwuid_r)来获取这个用户在/etc/passwd中相应的条目信息,并把这些信息存放在一个stru ...
首先说一下什么是getpw系列函数,它主要是指这些函数:
这些函数根据一个用户名(getpwnam和getpwnam_r两个函数)或者一个用户ID(getpwuid和getpwuid_r)来获取这个用户在/etc/passwd中相应的条目信息,并把这些信息存放在一个struct passwd的结构体里面,然后再把这个结构体的指针返回。问题就出在这个存储用户信息的结构体上面,它是由getpw函数在程序中自定义的一块静态存储区,而且每调用一次getpw函数,这个静态存储区就会被重写一次。比如下面这段代码:
1 #include<errno.h> 2 #include<pwd.h> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<stdarg.h> 6 #include<stdio.h> 7 #include<sys/types.h> 8 9 #define BUFSIZE 51210 11 void err_exit(char *fmt,...);12 13 int main(int argc,char *argv[])14 {15 16 struct passwd *mistr;17 struct passwd *rootstr;18 19 if(NULL == (mistr=getpwnam("michael")))20 err_exit("[getpwnam]<mi>:");21 if(NULL == (rootstr=getpwnam("root")))22 err_exit("[getpwnam]<root>:");23 24 printf("name = %s\n",mistr->pw_name);25 printf("name = %s\n",rootstr->pw_name);26 27 return 0;28 }
原标题:关于getpw系列函数返回的静态区域
关键词:get
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。