请问:如何让read函数(从标准输入)被信号中断
我想让read函数在没有输入的情况下,3秒后被时钟中断,请问该怎么做?(我的程序read不会被中断,只是到了3秒会输出提示,但read函数还是在等待)
请看:
void handler(int sig)
{
printf("recv a sig=%d\n",sig);
}
int main()
{
signal(SIGALAM,handler);
alarm(3);
char buf;
int ret;
ret=read(0,buf,sizeof(buf));
if(ret==-1)
{
printf("interrupt by alarm signal\n");
}
return 0;
}
会不会是 restart 本帖最后由 nswcfd 于 2016-07-12 11:42 编辑
楼上正解。
s/SIGALAM/SIGALRM
rt_sigaction(SIGALRM, {0x4005e4, , SA_RESTORER|SA_RESTART, 0x3aa5a32920}, {SIG_DFL, [], 0}, 8) = 0
alarm(3) = 0
read(0, 0x7fffd3142210, 1024) = ? ERESTARTSYS (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f999e7c4000
write(1, "recv a sig=14\n", 14recv a sig=14
) = 14
rt_sigreturn(0) = 0
read(0, ^C <unfinished ...>
页:
[1]