c - 检测流的结束

时间:2010-12-23 03:35:18

标签: c inputstream

我正在编写一个 c 应用程序,并希望执行一些外部程序并解析输出,类似于编写脚本和使用expect。

如何设置执行任务的超时? 我怎么知道没有更多的数据要从流中读取,即。它在等待输入?

谢谢,

沃尔特

3 个答案:

答案 0 :(得分:1)

您可以使用select()来检查是否有可从流中读取的字节。如果没有,那么很好地表明外部程序没有输出东西 - 它要么等待输入要么只是忙着工作。我不认为有一种通用的方法来区分这两种状态。

答案 1 :(得分:0)

  

如何设置执行超时   一项任务?

使用select()并设置超时。在致电recv()之前调用此项。

  

我怎么知道没有更多   要从流中读取的数据,即。它是   等待输入?

这比较棘手。您需要有一些协议,以便发送方可以提醒接收方已完成。 HTTP方法只是关闭发送端的套接字,这会导致接收方的recv()返回零字节。

另一种方法是发送方发送特殊字符或字符序列。另一种方法,根据您的应用程序,您可能有一个确切的字节数要传输;这很少见。

答案 2 :(得分:0)

假设您正在使用POSIX兼容系统:

您可以通过使用类似select的函数轮询任务的输入流来超时。 (See this tutorial)。使用feof函数检测流的结尾。