程序通过Ubuntu上的C程序显示所有登录用户?
我有一个名为allloggedin.c
程序,其目的是显示所有登录的用户。
每当我尝试在终端上运行它(使用gcc)时,它会给出错误“Segmentation fault(core dumped)”。
#include #include #include int main(void) { struct utmp *n; char *a; int i; setutent(); n=getutent(); while(n!=NULL) { if(n->ut_type==7) { printf("%9s",n->ut_user); printf("%12s",n->ut_line); printf(" "); for(i=4;iut_host); printf(")"); printf("\n"); } n=getutent(); } }
有人可以解释一下这个程序吗?
你得到的分段错误是由于行:
printf("%c",a[i]);
由于您没有初始化指针a
,它可以指向任何地址,当您取消引用它时可能会导致分段错误。
我不确定你要在for循环中打印什么,所以我完全从代码中删除它。
这是代码的清理版本:
#include #include #include int main(void) { struct utmp *n; setutent(); n=getutent(); while(n) { if(n->ut_type==USER_PROCESS) { printf("%9s%12s (%s)\n", n->ut_user, n->ut_line, n->ut_host); } n=getutent(); } return 0; }
我用适当的宏USER_PROCESS
替换了数字7。 此外,您可以将所有打印放在一个printf
调用中。
所以程序基本上做的是为每个用户获取utmp结构并以一种奇特的方式打印它。
有关所用函数和utmp结构的更多信息,您可以查看utmp.h参考。