Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在POSIX C中有什么方法可以做到这一点吗?_C_Posix_Nonblocking - Fatal编程技术网

在POSIX C中有什么方法可以做到这一点吗?

在POSIX C中有什么方法可以做到这一点吗?,c,posix,nonblocking,C,Posix,Nonblocking,我想知道,在Unix和Unixlike系统(如BSD、GNU/Linux等)上是否有办法做到这一点。我不在乎是否必须使用标准的C I/O或低级的Unix I/O接口,因为在这一点上,我还没有足够的时间致力于为此目的使用其中一个接口。简言之,如果一个接口允许我这样做,而另一个不允许,那么我将使用允许这样做的接口 不管怎样,这是我想做的。我又有了一个输入文件流,不管它是ANSI文件结构还是Unix文件描述符,我想检查这个流中是否有任何数据等待读取,但如果没有数据等待读取,这里有一个问题,但是以后可能

我想知道,在Unix和Unixlike系统(如BSD、GNU/Linux等)上是否有办法做到这一点。我不在乎是否必须使用标准的C I/O或低级的Unix I/O接口,因为在这一点上,我还没有足够的时间致力于为此目的使用其中一个接口。简言之,如果一个接口允许我这样做,而另一个不允许,那么我将使用允许这样做的接口

不管怎样,这是我想做的。我又有了一个输入文件流,不管它是ANSI文件结构还是Unix文件描述符,我想检查这个流中是否有任何数据等待读取,但如果没有数据等待读取,这里有一个问题,但是以后可能会有更多这样的数据进来,比如如果在这个文件流的另一端是我正在与之交互的另一个程序,我只希望我的程序能够知道还没有可用的数据,因此,它可以继续执行其他操作,稍后再检查是否有新数据进入,而不是在等待更多信息时冻结我的程序

而且,如果没有数据等待读取——我想知道,如果文件流的另一端是另一个可以向流发送更多数据的程序,或者如果文件流的另一端的程序已终止或终止,则以后是否有可能出现更多数据在文件流的结尾或文件流引用实际文件时关闭文件流


那么,在Unix类型的系统上用C语言有什么方法可以做到这一点呢?如果是,怎么做?再一次,在这一点上,我真的不在乎我是使用ANSI C标准I/O还是必须使用低级Unix I/O。

您所描述的是在非阻塞模式下读取文件的标准行为

如果没有要读取的数据,它将返回-1,errno设置为EAGAIN。然后你可以做一些其他的事情一段时间

如果有数据要读取,它将返回读取的数据量

如果由于文件上的eof或管道写入端的关闭等原因,无法读取更多数据,则返回0


您可以将非阻塞模式设置为要打开的参数或通过fcntl。

您可能需要阅读诸如select、epoll和非阻塞I/O之类的内容。查找O_NONBLOCK。最简单的可能是重新阅读关于非常感谢您的内容,在这种情况下,我将使用低级别Unix I/O。:-谢谢-请注意,有时您可能需要在获得足够的数据来处理某件事情之前附加来自多个读取的数据。