Unix 使用pwrite附加到文件
我在学习UNIX编程时遇到了函数pwrite()。我读到了Unix 使用pwrite附加到文件,unix,atomic,Unix,Atomic,我在学习UNIX编程时遇到了函数pwrite()。我读到了 pwrite(file_descriptor,buf,bufsize,offset); 将以下两项合并为一个原子操作: lseek(file_descriptor,offset,SEEK_SET); write(file_descriptor,buf,bufsize); 但是如果我需要附加到一个文件呢 如何找到对应于文件结尾的偏移量值 即使我找到所需的偏移量值并使用该值调用pwrite(),它也不会是一个原子操作(因为查找偏移量和调
pwrite(file_descriptor,buf,bufsize,offset);
将以下两项合并为一个原子操作:
lseek(file_descriptor,offset,SEEK_SET);
write(file_descriptor,buf,bufsize);
但是如果我需要附加到一个文件呢
因此,我真正的问题是,如何使用pwrite()自动附加到文件?在符合要求的实现上,无法使用
pwrite
使其与O_append
一起工作。在linux上pwrite
忽略O_APPEND
的偏移量:
虫子
POSIX要求打开带有O_APPEND标志的文件时
对pwrite()写入数据的位置没有影响。
但是,在Linux上,如果文件是用O_APPEND打开的,pwrite()会追加
无论偏移量的值是多少,都将数据保存到文件末尾
您应该使用
O_APPEND
标志打开文件,并使用write
对其进行写入。根据报告:
如果设置了文件状态标志的O_APPEND标志,则应在每次写入之前将文件偏移量设置为文件的末尾,并且在更改文件偏移量和写入操作之间不应发生中间文件修改操作
请注意,使用高级fwrite
调用可能无法保证在seek和write之间不会发生文件修改