netdoger 发表于 2016-07-11 16:30

请问:如何让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;
      
}

mordorwww 发表于 2016-07-12 08:46

会不会是 restart

nswcfd 发表于 2016-07-12 10:51

本帖最后由 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]
查看完整版本: 请问:如何让read函数(从标准输入)被信号中断