读书人

应用longjmp带超时限制调用read

发布时间: 2012-09-06 10:37:01 作者: rapoo

使用longjmp,带超时限制调用read

//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 MAXLINE1024int 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 voidsig_alarm(int signo){longjmp(env_alarm, 1);}

读书人网 >移动开发

热点推荐