c++多进程编写一个唯一的文件
c++ multiprocess writing a unique file
我有一个进程,它创建多个分叉进程,每个分叉进程创建具有相同名称的文件。但要求是由任何一个分叉进程只创建一个文件。
你能建议一下如何确保文件只由一个进程创建吗。
在写文件之前,我试图检查文件是否存在,但它不起作用,因为多个进程正在通过检查。
您能建议如何确保文件只由一个进程创建吗。
- 每个并发进程(或线程(在目标目录中创建自己的文件,该文件具有唯一的临时文件名
mkstemp
- 然后进程
rename
将该文件转换为目标文件名。重命名是原子的,要么成功,要么失败。如果失败,则说明另一个进程已经创建了该文件。在这种情况下,可以删除临时文件,而应该打开具有目标文件名的文件
您可以在分叉之前在父进程中打开文件。然后,根据这个答案,每个孩子都可以重复使用文件描述符,你应该没事了。
当然,您仍然需要一些方法来同步不同的进程,以便正确地交错写入文件(一个进程写入AB
,另一个进程写C
,结果是ABC
或CAB
,但不是ACB
…(。对于线程来说,这样做更容易,所以如果可以使用它们,您可能更喜欢它们。否则,这个答案可能会引起你的兴趣。
编辑(根据问题的新评论(:如果我理解正确,你想做以下事情:
- 父进程创建多个子进程
- 每个孩子都将一些信息写入一个文件
- 在每个或所有子项终止后,父项从文件中读回信息
然后您可以执行以下操作:
- 父进程在分叉之前为每个子进程打开一个具有任意名称的新临时文件。这样,根据上面的内容,父级和子级具有相同的可用文件描述符
- 分叉后,子进程使用文件描述符将其信息写入,父进程将描述符推送到例如
std::vector
,或者如果更合适的话,将PID映射到FD的std::map
- 父进程等待子进程,在终止时使用存储的文件描述符来读回信息
您是否考虑过改用管道?它们可能是更好的选择。。。
相关文章:
- c++多进程编写一个唯一的文件
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 从另一个唯一 ptr 的原始 ptr 创建唯一的 ptr
- 如何在以 256 为基数的唯一 xLen-digit 表示中写一个整数 x?
- 需要在C 中生成一个从00001到99999的唯一5位数字
- 如何在给定任意数量的整数的情况下创建一个唯一键?并使用该键存储,然后从地图中查找
- 尝试创建一个读取.txt文件,显示它,计数唯一单词的程序,并在使用了多少次的情况下显示独特的单词.C
- 如何制作一个采用类型类的唯一指针?(通用)它不让我
- 为什么要在 c++ 中创建一个指向基元类型的唯一指针?
- 如何将唯一指针从一个向量移动到另一个唯一指针向量
- 将 n 个整数组合成一个唯一的表示形式
- 正确地返回一个唯一的ptr
- 为每个对象定义一个唯一的函数
- 需要在数组中找到一个唯一的数字
- 更快的方式,然后我填充一个唯一的整数除了两个值的向量?c++
- 如何将三个整数组合成一个唯一的标记,使标记在c++中保持整数
- 一个唯一的ptr类如何将它的实例指针传递给它的成员对象
- 试图在每次迭代中产生一个唯一的随机数序列
- 可变模板类:每个可变模板参数可以实现一个唯一的成员函数吗
- 如何将两个正整数映射为一个唯一的整数