linux - APUE里面第10章,关于信号的这段代码不理解。请指教
本文介绍了linux - APUE里面第10章,关于信号的这段代码不理解。请指教的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在10.6节的可冲入函数段落中,有一段示例程序,这段程序从信号处理函数中调用非可重入函数getpwnam
每一秒my_alarm都会被调用一次。
#include<stdio.h>
#include<pwd.h>
#include "apue.h"
static void my_alarm(int signo)
{
struct passwd *rootptr;
printf("IN signal handler\n");
if((rootptr = getpwnam("root")) == NULL)
err_sys("getpwnam(root) error");
alarm(1);
}
int main(void)
{
struct passwd *ptr;
signal(SIGALRM,my_alarm);
alarm(1);
for(;;)
{
if((ptr = getpwnam("sar")) == NULL)
err_sys("getpwnam error");
if(strcmp(ptr->pw_name,"sar") != 0)
printf("return value corrupted,pw_name = %s\n",ptr->pw_name);
}
}
但是当我运行出来之后,显示:getpwnam error: Success
我想知道这个Success在哪里出来的呢。代码里面没有看到。而且,不是说每隔一秒就会调用一次吗,但是程序运行一次就结束了。
解决方案
你的机器没有
sar
这个用户。所以程序会执行err_sys("getpwnam error");
。然后err_sys最后会执行exit(1)
退出。为神马有Success,你可以trace一下apue error handling的实作。
这篇关于linux - APUE里面第10章,关于信号的这段代码不理解。请指教的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文