我们正在编写一个多线程应用程序,该应用程序执行一些操作并将二进制数据写入磁盘。是否可以让每个线程std::fopen同时写入同一个文件?原因是每个线程都可以完成它的工作并拥有自己对可写文件的访问权限。
std::fstream具有根据 C stdio 库定义的功能。如果确实指定了它,我会感到惊讶,但打开同一个文件两次最可能的行为是多个内部缓冲区绑定到同一个文件描述符。
同时写入同一文件中多个点的常用方法是 POSIXpwrite或writev. 此功能未由 C stdio 封装,扩展后也不由 C++ iostream 封装。但是,同一个文件系统文件有多个描述符也可能有效。
编辑:在 Mac OS X 中对同一文件调用POSIXopen两次会产生不同的文件描述符。因此,它可能可以在您的平台上运行,但可能不可移植。
一个明确的答案需要连接这些点:
fstream工作方式类似于 C (stdio) 流。fopen仅定义为将流与新打开的文件关联)。这比我目前要做的研究要多一些,但我确信有人已经完成了这些工作。
| 归档时间: |
|
| 查看次数: |
12316 次 |
| 最近记录: |