编辑以明确回答您的问题:
- 如果我有多个进程向同一个文件追加,每个日志行是否会清晰可见或者它们会混杂在一起,因为进程切换?
是的,每个日志行将会完整出现,因为根据msdn/vs2010::
"此函数[即fwrite()]锁定调用线程,并且因此是线程安全的。如需非锁定版本,请参阅_fwrite_nolock。"
在GNU手册页面上也暗示了相同的内容:
"— Function: size_t fwrite (const void *data, size_t size, size_t count, FILE *stream)
This function writes up to count objects of size size from the array data, to the stream stream. The return value is normally count, if the call succeeds. Any other value indicates some sort of error, such as running out of space.
— 函数:size_t fwrite_unlocked(const void * data,size_t size,size_t count,FILE * stream)
该函数是用于将数据块写入文件的。它与fwrite函数非常相似,但是不会对文件进行加锁。如果您需要高效地写入大量数据,可以考虑使用此函数。
The fwrite_unlocked function is equivalent to the fwrite function except that it does not implicitly lock the stream.
This function [i.e., fwrite_unlocked( )] is a GNU extension. "
- 如果有很多进程需要访问该文件,这个写操作会被阻塞吗?这样会导致并发问题吗?
是的,从问题1的意涵可以得出这个答案。
write(2)
直接写入的另一个原因。 - cnicutar