两个进程同时打开,一个“W”,另一个“r”。发生错误?

时间:2011-12-16 09:24:16

标签: c gcc fopen

假设我有一个进程调用A,它调用fopen(filename,“w”);每秒,并在其中写入数据,而进程B每0.2秒调用fopen(filename,“r”)并从中读取数据!!

在很少的情况下,当A正在写入数据时,在A fclose之前,B进程会执行fopen并从中读取数据。我认为它有同步问题!

在线程中使用Mutex很容易,但我没有尝试过程之间的互斥。数据最多只有400个字节,我想知道什么是避免进程写入数据的简单方法,另一个进程同时读取,或者,当一个进程A打开文件时,另一个进程B会等到进程A fclose文件!

1 个答案:

答案 0 :(得分:1)

如果必须使用文件(正如@aix所说,可能有更好的方法),请不要尝试在编写文件时读取文件,否则结果将不确定。

相反,将数据写入不同的文件名,关闭它,然后将其移动到正确的位置(在Linux上,使用rename())。

如果您不喜欢,请尝试使用文件锁。至少在Linux上,这些实际上并不阻止对文件的访问,它们只是作为进程间互斥体。您没有说明您拥有什么操作系统,但对于Linux,请参阅man 2 flock