如何在C语言中使用分叉来写入和读取文件

时间:2019-03-23 22:38:45

标签: c linux file fork flock

我想知道如何在用C编写的多进程程序中读写?我尝试使用flock和文件描述符,但是没有用。有没有人可以帮助我?谢谢。

            int f;        
            f = open("test.txt",O_RDWR | O_CREAT | O_SYNC | O_APPEND);
            int lock = flock(f, LOCK_SH);
            write(f, "asdfg", sizeof("asdfg"));
            int release = flock(f, LOCK_UN);
            close(f);

1 个答案:

答案 0 :(得分:2)

flock不一定会阻止您的进程写入文件,它只是在不同进程和线程之间进行协调的工具。如文档中所述:

  

flock()仅放置咨询锁;在获得文件适当权限的情况下,进程可以随意忽略flock()的使用并对该文件执行I / O。

您在此处使用共享锁(LOCK_SH),这意味着多个线程可以使用它。听起来,如果要一个线程等待另一个线程完成,则需要排他锁。

如果要具有独占写访问权限,则应使用LOCK_EX。您还应该密切注意返回值,因为忽略这会导致各种麻烦。假设某事成功,然后继续进行,则会引起许多难以修复的错误。