【发布时间】:2014-02-08 12:03:45
【问题描述】:
在准备期末考试时,我发现了一个非常有趣的任务。这就是我想要编写的代码。
程序将标准输入读入缓冲区(固定大小)。当缓冲区已满时,程序将其打印到文件中。但是如果缓冲区没有在固定时间(超时)被填充,程序将打印到文件[TIMEOUT] 和缓冲区的其余部分(当前读取)
第一个例子:
buffer_size = 5;超时 = 4;
$ while : ; do printf 1; sleep 1; done | ./a.out
应该写 [TIMEOUT]1111[TIMEOUT]1111[TIMEOUT]1111 等,因为 while 循环只写 4 个字符(在 4 秒内)。
第二个例子
buffer_size = 3;超时 = 5;
$ while : ; do printf 1; sleep 1; done | ./a.out
应该写 111 111 111 等,因为 while 循环写入 3 个字符(在 3 秒
我正在尝试使用poll 对其进行编码,但我不知道如何找出是所有字符都已写入还是仅一个字符。我也不能卡在read(0, buffer, buffer_size) 上,因为我会错过超时。甚至可能吗?我想这就像我们的老师指出的那样是一个很好的练习。
当然,忙等待是不可接受的,只允许经典的 POSIX 系统调用(轮询、选择、读取、写入、打开...)。
有人可以提示我吗?我不知道如何管理这种行为,并且更近的 stackoverflow 和谷歌都给了我答案(或者我可能只是不知道要搜索什么)
提前致谢
【问题讨论】:
-
我写了一个使用
poll设置超时的示例,在我对这个问题的回答中使用scanf- stackoverflow.com/questions/21197977/…。这就是你要找的吗?
标签: c unix timeout buffer polling