ホームページ  >  に質問  >  本文

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在哪里出来的呢。代码里面没有看到。而且,不是说每隔一秒就会调用一次吗,但是程序运行一次就结束了。

怪我咯怪我咯2741日前703

全員に返信(1)返信します

  • 巴扎黑

    巴扎黑2017-04-17 16:34:47

    1. あなたのマシンにはユーザー sar がありません。したがって、プログラムは err_sys("getpwnam error"); を実行します。その後、err_sys は最終的に exit(1) を実行して終了します。

    2. Shenma は成功しているため、apue エラー処理の実装をトレースできます。

    返事
    0
  • キャンセル返事