免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2850 | 回复: 9
打印 上一主题 下一主题

[C] alarm超时设置的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-17 08:57 |只看该作者 |倒序浏览
alarm(TIMEOUT);
        printf("timeout ==[%d]\n",TIMEOUT);
        getchar()  //此处原来是用的tcp函数 read ,后来为了调试方便改成getchar的
        alarm(0);


超时函数
void    t_out()
{
    int i;
    printf("run timeout\n");
    return;
}


现在运行结果:
设置TIMEOUT=2秒,发现到2秒能转到t_out函数,并输出 "run timeout"
但是getchar()函数并没有结束,还在处于getchar()状态
以前记得应该是中断掉这个函数,到alarm(0)位置的啊
我是在AIX5.2 的IBM 6000上运行的
该程序在linux上运行通过的,后来要移植到6000。

[ 本帖最后由 xbwu 于 2008-1-17 09:02 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-17 09:21 |只看该作者
这个不是系统调用
RETURN VALUE
       fgetc(), getc() and getchar() return the character read as an unsigned char cast
       to an int or EOF on end of file or error.

       gets()  and  fgets()  return s on success, and NULL on error or when end of file
       occurs while no characters have been read.

       ungetc() returns c on success, or EOF on error.


getchar实际上最终是调用read,read检查到被EINTR,要再读,否则有信号处理的程序就没发使用标准IO库了

论坛徽章:
0
3 [报告]
发表于 2008-01-17 09:26 |只看该作者
getchar()  //此处原来是用的tcp函数 read ,后来为了调试方便改成getchar的
这句原来是这样的
TransLen = (Read_flg=(len = read (sockfd, TransFile, MAXLINE)));
===========================
但是原来是tcp 的read函数的时候也是这样的,现在我要实现超时了就退出read的
好像aix和sco ,linux处理的结果不太一样

论坛徽章:
0
4 [报告]
发表于 2008-01-17 09:30 |只看该作者
man sigaction
不要设 SA_RESTART

论坛徽章:
0
5 [报告]
发表于 2008-01-17 09:35 |只看该作者
对,linux默认是不重启的,可以加SA_RESTART到sigaction的flags中,实现自动重启

论坛徽章:
0
6 [报告]
发表于 2008-01-17 10:30 |只看该作者

aix 里面SA_RESTART是自动的吗?

aix 里面SA_RESTART是自动的吗? 如何设置成不自动。
我看网上有个 SA_INTERRUPT 的设置;但是aix里面好像没有这个选项啊

论坛徽章:
0
7 [报告]
发表于 2008-01-17 10:47 |只看该作者
不知道
有RESTART就没有 INTERRUPT 吧,总有一个是默认的,另一个是改变默认的方式

论坛徽章:
0
8 [报告]
发表于 2008-01-17 10:55 |只看该作者
不同平台默认处理是不一样的

论坛徽章:
0
9 [报告]
发表于 2008-01-17 11:09 |只看该作者
FreeBSD 也没有SA_INTERRUPT。我认为对SA_RESTART取反再和sa_flags 按位与应该可以吧。

如果没有什么特别要求,把 sa_flags 直接置零应该也可以(最起码,FreeBSD上是这样的)。

论坛徽章:
0
10 [报告]
发表于 2008-01-17 11:25 |只看该作者

好的,谢谢大家

好的,谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP