使用pwrite附加到文件

时间:2014-03-08 10:31:59

标签: unix atomic

我在学习UNIX编程时遇到了函数pwrite()。我读了那个

pwrite(file_descriptor,buf,bufsize,offset);

将以下两个组合成一个原子操作:

lseek(file_descriptor,offset,SEEK_SET);
write(file_descriptor,buf,bufsize);

但是如果我需要附加到文件怎么办?

  1. 如何找到与文件末尾对应的偏移值?
  2. 即使我找到了所需的偏移值并使用该值调用pwrite(),它也不会是原子操作(因为找到偏移量并且调用pwrite()可能会被另一个进程中断)。
  3. 所以,我真正的问题是,如何使用pwrite()以原子方式附加到文件?

2 个答案:

答案 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调用可能无法保证在搜索和写入之间没有中间文件修改。