我有一个创建多个派生流程和每个分叉流程的流程 创建一个具有相同名称的文件。但是要求是任何一个分支过程都只能创建一个文件。
能否请您建议如何确保仅通过一个过程创建文件。
我试图在写入文件之前检查文件是否存在,但是由于多个进程正在通过该检查,因此它无法正常工作。
答案 0 :(得分:2)
能否请您建议如何确保仅由一个进程创建文件。
mkstemp
的唯一临时文件名。rename
转换为目标文件名。 Renaming is atomic并且成功或失败。如果失败,则说明另一个进程已经创建了该文件。在这种情况下,可以删除临时文件,而应打开具有目标文件名的文件。答案 1 :(得分:0)
您可以在分支之前中打开文件。然后,根据this的答案,每个孩子都可以重复使用文件描述符,就可以了。
当然,您仍然需要一些方法来同步不同的进程,以便正确地交错写入文件(一个进程写入AB
,另一个进程C
产生{{1 }}或ABC
,但不是 CAB
...)。使用线程更容易做到这一点,因此,如果您可以使用它们,您可能会更喜欢它们。否则,您可能会对this答案感兴趣。
编辑(根据要提问的新评论):如果我理解正确,则需要执行以下操作:
然后您可以执行以下操作:
ACB
,或更合适的是std::vector
将PID映射到FD。您是否考虑过改用pipes?他们可能是更好的选择...