Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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
C++ 不同类型文件的读/写块(即挂起程序)的时间和方式?_C++_C_Linux_Unix - Fatal编程技术网

C++ 不同类型文件的读/写块(即挂起程序)的时间和方式?

C++ 不同类型文件的读/写块(即挂起程序)的时间和方式?,c++,c,linux,unix,C++,C,Linux,Unix,我想我不清楚何时以及如何读取/写入各种文件的块。 (磁盘文件、管道、套接字、FIFO) 有人能解释每种文件类型的读写场景吗 谢谢 对于基于磁盘的文件,读取和写入可能会在执行请求的读取/写入时短暂阻塞。文件末尾的读取总是会返回一个简短的结果,而对完整FS文件的写入将失败——除非出现各种异常情况,对普通文件的读取/写入将永远不会无限期阻塞 对于管道、套接字和FIFO,read将在没有可用数据时阻塞,write将在管道/套接字/FIFO“已满”时阻塞(例如,您已写入一组数据,而另一端的进程尚未读取)。

我想我不清楚何时以及如何读取/写入各种文件的块。 (磁盘文件、管道、套接字、FIFO)

有人能解释每种文件类型的读写场景吗


谢谢

对于基于磁盘的文件,
读取
写入
可能会在执行请求的读取/写入时短暂阻塞。文件末尾的
读取
总是会返回一个简短的结果,而对完整FS文件的
写入
将失败——除非出现各种异常情况,
对普通文件的读取
/
写入
将永远不会无限期阻塞


对于管道、套接字和FIFO,
read
将在没有可用数据时阻塞,
write
将在管道/套接字/FIFO“已满”时阻塞(例如,您已写入一组数据,而另一端的进程尚未读取)。填充缓冲区所需的确切数据量是可变的;例如,对于一个管道,它通常在4到64 kB之间。

管道和FIFO之间有什么区别?@kai,如果你问如何做一些特定的事情,或者一段特定的代码做什么,我想你会有更好的运气。如前所述,这个问题太模糊了……我猜“积木”是问题的关键部分(有点隐藏在句子中)对吗?因此,您会问,当读取或写入这些类型的文件时,在可能的阻塞情况下有什么区别?我猜他是在询问缓冲读写?这个问题太混乱,无法以当前形式回答。试着在代码中给出一个具体的例子,您认为不同类型的文件会有不同的行为,并描述您认为行为上的差异是什么。因此,对于管道、套接字和FIFO,读和写可能会无限期地阻塞?是的,绝对如此。考虑shell管道:如果您有管道<代码> Foo> Bar ,并且<代码> FoO 不向标准输出写入任何东西,<代码> BAR <代码>将在“代码>读取(STDIN)上被阻塞,直到有任何东西出现,或者管道关闭。