linux signal使用注意点

来源:互联网 发布:织梦v57漏洞 编辑:程序博客网 时间:2024/06/04 20:11

1.  信号安装后,只生效一次。要重复可接受信号,需要重新安装。

void sigroutine(int signo){    sig_alarm_flag = 1;    signal(SIGALRM, sigroutine);}

2. 在信号处理程序中调用不可重入函数,其结果是不可预见的。
 

#include <pwd.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>#include <string.h>static void my_alarm(int signo){        struct passwd *rootptr;        printf("in signal handler\n");                if((rootptr = getpwnam("root")) == NULL)        {                printf("getpwnam() error for root\n");                return;        }        alarm(1);}int main(void){        struct passwd *ptr;        signal(SIGALRM, my_alarm);        alarm(1);                for(;;)        {                if ((ptr = getpwnam("user")) == NULL)                {                        printf("getpwnam() error for user\n");                        exit(0);                }                if (strcmp(ptr->pw_name, "user") != 0)                {                        printf("return value corruptd!, pw_name = %s\n", ptr->pw_name);                }                else                {                        printf("get correct, pw_name = %s\n", ptr->pw_name);                }        }        exit(0);}


 

原创粉丝点击