如果在Unix和Unix类系统(如BSD,GNU / Linux等)上有办法,我想知道一些事情。我不关心我是否必须使用标准C I / O或低级Unix I / O接口,因为在这一点上,我还不足以承诺使用其中一个或另一个用于此目的。简而言之,如果一个界面允许我这样做而另一个界面不允许,那么就是允许我这样做的界面。
无论如何 - 这就是我想要做的。我有一个输入文件流(再次,不关心它是ANSI“FILE”结构还是Unix文件描述符)我想检查这个流是否有任何数据等待读取 - - 但是这里有捕获----如果有没有数据等待读取,但是有可能在以后有更多这样的数据进入(比如在这个文件的另一端) -stream是我正在与之互动的另一个程序)我只是希望我的程序能够知道没有可用的数据,所以它可以继续执行其他操作并稍后检查以查看是否有< em> new 数据已进入(而不是在等待更多信息时冻结我的程序)。
此外,如果没有数据等待阅读----我想知道以后是否有更多机会可能进来(如果文件流的另一端是另一个可能发送的程序进一步的数据到流)---或者如果有没有的机会有更多的数据进入(即如果文件流另一端的程序终止或关闭文件 - 在它的结尾流 - 或者如果文件流引用实际文件)。
那么,在Unix类型的系统上有没有办法在C中做到这一点?如果是这样,怎么样? (再次,在这一点上,我真的不在乎我是否使用ANSI C标准I / O或必须使用低级Unix I / O)。
答案 0 :(得分:2)
您所描述的是read
模式下non-blocking
文件的标准行为。
如果没有要读取的数据,则返回-1,并将errno设置为EAGAIN。然后,您可以暂时做一些其他事情。
如果有数据要阅读,它将返回读取的数据。
如果没有可能读取更多数据(因为文件上的eof或关闭管道的写入端或诸如此类的东西),则返回0。
您可以将非阻止模式设置为open
或fcntl
的参数。