亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4210 | 回復(fù): 4
打印 上一主題 下一主題

【請教】read被中斷后的返回值 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-07-08 22:11 |只看該作者 |倒序?yàn)g覽
代碼如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. #include <errno.h>

  5. #define MAXLINE 1024

  6. static void sig_alrm(int);

  7. int
  8. main(void)
  9. {
  10.     int     n;
  11.     char    line[MAXLINE];

  12.     if (signal(SIGALRM, sig_alrm) == SIG_ERR) {
  13.         printf("signal(SIGALRM) error\n");
  14.         exit(1);
  15.     }

  16.     alarm(10);
  17.     if ((n = read(fileno(stdin), line, MAXLINE)) < 0) {
  18.         printf("read error:%s\n", strerror(errno));
  19.         exit(0);
  20.     }
  21.     alarm(0);

  22.     write(fileno(stdout), line, n);
  23.     exit(0);
  24. }

  25. static void
  26. sig_alrm(int signo)
  27. {
  28.     printf("alrm\n");
  29.     /* nothing to do, just return to interrupt the read */
  30. }
復(fù)制代碼
什么都不輸入或者輸入幾個(gè)字符,等待alrm信號。
信號產(chǎn)生后,打印alrm,然后read繼續(xù)阻塞,沒有按照預(yù)期退出程序。
可是我看了read的man手冊,說read被信號打斷后會返回-1,
這里為什么沒有返回呢?
環(huán)境:2.6.38.8-32.fc15.i686 #1 SMP

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-07-08 23:02 |只看該作者
本帖最后由 wenjianhn 于 2011-07-08 23:03 編輯

read沒有被信號打斷,而是在內(nèi)核自動重新執(zhí)行

UNP 10.5 中斷的系統(tǒng)調(diào)用 page 244
深入理解linux內(nèi)核 系統(tǒng)調(diào)用的重新執(zhí)行 page 445

代碼中的EINTR是為了魯棒性

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-07-09 08:57 |只看該作者
在Unix環(huán)境高級編程中,列出了哪些系統(tǒng)函數(shù)在中斷后能自啟動的,而read正好在里面,不知道這樣的描述對不對……

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-07-09 11:05 |只看該作者
回復(fù) 2# wenjianhn


   恩 了解了。

   read被中斷后,被內(nèi)核重啟了。 在fedora 上是這樣的。 在ubuntu上不是, 也就是說各個(gè)發(fā)行版實(shí)現(xiàn)不一樣。而且可以使用sigaction來指定被中斷的系統(tǒng)調(diào)用是否重啟。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-07-18 11:35 |只看該作者
回復(fù) 4# zhanglistar


我的環(huán)境:   
DISTRIB_DESCRIPTION="Ubuntu 11.04"
2.6.38-10-generic

運(yùn)行你的代碼,沒有被中斷
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP