getspent、setspent和endspent运行出错

来源:互联网 发布:linux查看文件系统类型 编辑:程序博客网 时间:2024/06/08 19:23

下面这代码本身没有任何问题,只是运行时报了段错误。

 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$GKhyMKTwANuwIhwExRnY9Yn1sWDhf5K9ISBq95vqWrhggT7JAe40dFP18qzvYjdT8c7QgwKfCvFJk91qaK73U0vboxadd !
原创粉丝点击