kar*_*rim 13 c unix linux kernel system-calls
编写一个程序,打开现有文件,使用O_APPEND标志进行写入,然后在写入一些数据之前搜索文件的开头.数据在文件中出现在哪里?为什么?
这是我的代码:
main() {
int fd = open("test.txt", O_WRONLY | O_APPEND);
lseek(fd, 0, SEEK_SET);
write(fd, "abc", 3);
close(fd);
}
Run Code Online (Sandbox Code Playgroud)
并试过它,发现数据已写入文件的末尾,我想了解为什么?因为我表示O_APPEND标志没有那么简单我认为
Ada*_*eld 18
当您打开文件O_APPEND时,无论当前文件指针来自最近的调用lseek(2)或最新的读/写操作,所有数据都会写入结尾.从open(2)文档:
O_APPEND
该文件以追加模式打开.在每个write(2)文件之前,文件偏移量位于文件的末尾,就像使用lseek(2).
如果要将数据写入文件的末尾,然后将其打开,则打开它,不O_APPEND使用fstat(2),获取文件大小(st_size成员在内struct stat),然后寻找该偏移量来编写结束.