//Set max timeout when block reading
// by Jay Zhang
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <setjmp.h>
static void sig_alarm(int);
static jmp_buf env_alarm;
#define MAXLINE 1024
int main(void)
{
int n;
char line[MAXLINE];
if(signal(SIGALRM, sig_alarm) == SIG_ERR) {
printf("signal SIGALARM error\n");
return -1;
}
if(setjmp(env_alarm) != 0) {
printf("read timeout\n");
return 0;
}
alarm(10);
if((n = read(STDIN_FILENO, line, MAXLINE)) < 0) {
printf("read error\n");
}
alarm(0);
write(STDOUT_FILENO, line, n);
return 0;
}
static void
sig_alarm(int signo)
{
longjmp(env_alarm, 1);
}
使用longjmp,带超时限制调用read
最新推荐文章于 2020-04-02 17:58:25 发布