关于信号重入的测试代码

qq_n9wlaydo Linux 下 C 编程 ——... 2017年09月05日提问

  • 0 回答
  • 384 浏览

我觉得测试慢系统调用重入性代码用下面这个好点,read这里不会产生EINTR错误

#include <stdlib.h> 
#include <unistd.h> 
#include <signal.h> 
#include <errno.h> 
#include <string.h> 
#include <stdio.h>

void sig_handler(int sig)
{
    printf("catch signal SIGALRMn");
}

int main(int argc, char *argv[]) 
{
    if (signal(SIGALRM, sig_handler) == SIG_ERR)
    {
        fprintf(stderr, "signal error:%sn", strerror(errno));
        exit(EXIT_SUCCESS); 
    } 
    alarm(3);
    char buf[100] = { 0 };
    ssize_t n = read(STDIN_FILENO, buf, 100);
    if (n == -1)
    {
        fprintf(stderr, "error:%sn", strerror(errno)); 
    } 
    write(STDOUT_FILENO, buf, n);
    return 0;		
}