我想知道如何在用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);
答案 0 :(得分:2)
flock
不一定会阻止您的进程写入文件,它只是在不同进程和线程之间进行协调的工具。如文档中所述:
flock()
仅放置咨询锁;在获得文件适当权限的情况下,进程可以随意忽略flock()
的使用并对该文件执行I / O。
您在此处使用共享锁(LOCK_SH
),这意味着多个线程可以使用它。听起来,如果要一个线程等待另一个线程完成,则需要排他锁。
如果要具有独占写访问权限,则应使用LOCK_EX
。您还应该密切注意返回值,因为忽略这会导致各种麻烦。假设某事成功,然后继续进行,则会引起许多难以修复的错误。