我在学习UNIX编程时遇到了函数pwrite()。我读了那个
pwrite(file_descriptor,buf,bufsize,offset);
将以下两个组合成一个原子操作:
lseek(file_descriptor,offset,SEEK_SET);
write(file_descriptor,buf,bufsize);
但是如果我需要附加到文件怎么办?
所以,我真正的问题是,如何使用pwrite()以原子方式附加到文件?
答案 0 :(得分:3)
在符合要求的实现中,无法使用pwrite
使其与O_APPEND
一起使用。在Linux pwrite
上忽略O_APPEND
:
BUGS
POSIX要求打开带有O_APPEND标志的文件 对pwrite()写入数据的位置没有影响。 但是,在Linux上,如果使用O_APPEND打开文件,则附加pwrite() 数据到文件末尾,无论偏移值。
答案 1 :(得分:0)
您应该使用O_APPEND
标志打开该文件,并使用write
写入该文件。根据{{3}}:
如果设置了文件状态标志的O_APPEND标志,则应在每次写入之前将文件偏移设置为文件的末尾,并且在更改文件偏移和写入操作之间不应进行中间文件修改操作。 / p>
请注意,使用高级fwrite
调用可能无法保证在搜索和写入之间没有中间文件修改。