下面这代码本身没有任何问题,只是运行时报了段错误。
13 #include <shadow.h>
22 int main(int argc, char **argv)
23 {
199 struct spwd *ptr = NULL;
200 char name[] = "jack";
201 setspent();
202 while ((ptr = getspent()) != NULL)
203 if (strcmp(name, ptr->sp_namp) == 0)
204 break;
205
206 printf("%s %s\n", ptr->sp_namp, ptr->sp_pwdp);
207 ptr = getspent();
208 endspent();
209 printf("%s %s\n", ptr->sp_namp, ptr->sp_pwdp);
}
下面是编译执行结果:
jack@jxes-VirtualBox:~/samba_share/apue$ gcc test.c
jack@jxes-VirtualBox:~/samba_share/apue$ ./a.out
**Segmentation fault (core dumped)**
这三个函数(另外还有一个getspnam),它们操作的对像是/etc/shadow这个file,这个file是一个系统文件,主要用来记录账户名、密文的密码信息,以及有效时间信息,所以要操作这个文件得是root权限,所以上面错误是因为执行a.out需要root权限,在ubuntu下可以用sudo执行root权限。
jack@jxes-VirtualBox:~/samba_share/apue$ gcc test.c
jack@jxes-VirtualBox:~/samba_share/apue$ **sudo** ./a.out
jack $6$02HyL64f$GKhyMKTwANuwIhwExRnY9Yn1sWDhf5K9ISBq95vqWrhggT7JAe40dFP18qzvYjdT8c7QgwKfCvFJk91qaK73U0
vboxadd !