您的位置:首页 > 编程语言 > PHP开发

信号处理程序中调用不可重入函数getpwnam 起结果是不可预见的。

2015-09-01 16:50 651 查看
<bldc:/home/tingbinz/apue.2e/include/10>R*_*G:vim 10_2.c

#include "apue.h"

#include <pwd.h>

static void my_alarm(int signo)

{

        struct passwd *rootptr;

        printf("in signal handler\n");

        if((rootptr = getpwnam("root")) == NULL )

        {

                err_sys("failed to get information of root");

        }

        else

                printf("uname:%s\n",rootptr->pw_name);

        alarm(1);

}

int main (void)

{

        struct passwd *ptr;

        signal(SIGALRM,my_alarm);

        alarm(1);

        for(; ;)

        {

                if( (ptr = getpwnam("tingbinz")) == NULL)

                        err_sys("failed to get information of tingbinz");

                if( strcmp(ptr->pw_name,"tingbinz") != 0)

                        printf("error occur during reload function of main,uname in main function is:%s\n",ptr->pw_name);

        }

        return 0;

}

~

~

~

~

~

~

~

~

~

~
"10_2.c" 31L, 634C written

<bldc:/home/tingbinz/apue.2e/include/10>R*_*G:./10_2

in signal handler

uname:root

Alarm Clock
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息