- 论坛徽章:
- 0
|
代码如下:- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <errno.h>
- #define MAXLINE 1024
- static void sig_alrm(int);
- int
- main(void)
- {
- int n;
- char line[MAXLINE];
- if (signal(SIGALRM, sig_alrm) == SIG_ERR) {
- printf("signal(SIGALRM) error\n");
- exit(1);
- }
- alarm(10);
- if ((n = read(fileno(stdin), line, MAXLINE)) < 0) {
- printf("read error:%s\n", strerror(errno));
- exit(0);
- }
- alarm(0);
- write(fileno(stdout), line, n);
- exit(0);
- }
- static void
- sig_alrm(int signo)
- {
- printf("alrm\n");
- /* nothing to do, just return to interrupt the read */
- }
复制代码 什么都不输入或者输入几个字符,等待alrm信号。
信号产生后,打印alrm,然后read继续阻塞,没有按照预期退出程序。
可是我看了read的man手册,说read被信号打断后会返回-1,
这里为什么没有返回呢?
环境:2.6.38.8-32.fc15.i686 #1 SMP |
|