我正在编写一个 c 应用程序,并希望执行一些外部程序并解析输出,类似于编写脚本和使用expect。
如何设置执行任务的超时? 我怎么知道没有更多的数据要从流中读取,即。它在等待输入?
谢谢,
沃尔特
答案 0 :(得分:1)
您可以使用select()来检查是否有可从流中读取的字节。如果没有,那么很好地表明外部程序没有输出东西 - 它要么等待输入要么只是忙着工作。我不认为有一种通用的方法来区分这两种状态。
答案 1 :(得分:0)
如何设置执行超时 一项任务?
使用select()
并设置超时。在致电recv()
之前调用此项。
我怎么知道没有更多 要从流中读取的数据,即。它是 等待输入?
这比较棘手。您需要有一些协议,以便发送方可以提醒接收方已完成。 HTTP方法只是关闭发送端的套接字,这会导致接收方的recv()
返回零字节。
另一种方法是发送方发送特殊字符或字符序列。另一种方法,根据您的应用程序,您可能有一个确切的字节数要传输;这很少见。
答案 2 :(得分:0)
假设您正在使用POSIX兼容系统:
您可以通过使用类似select
的函数轮询任务的输入流来超时。 (See this tutorial)。使用feof
函数检测流的结尾。