编写一个程序,使用O_APPEND标志打开一个用于写入的现有文件,然后
然后在写入一些数据之前先查找文件的开头。在哪里
数据出现在文件中?为什么?
这是我的代码:
main() {
int fd = open("test.txt", O_WRONLY | O_APPEND);
lseek(fd, 0, SEEK_SET);
write(fd, "abc", 3);
close(fd);
}
并尝试了一下,发现数据已经写在文件的末尾,我想了解为什么?因为我表示O_APPEND标志不那么简单
最佳答案
当您使用O_APPEND
打开文件时,无论当前文件指针是从最新调用lseek(2)
还是最新的读/写操作,所有数据都将写入末尾。从 open(2)
documentation:
如果要在文件的末尾写入数据,然后再在以后的数据开始写入数据,请在不使用O_APPEND
的情况下将其打开,使用 fstat(2)
来获取文件大小(st_size
中的struct stat
成员),然后寻找该偏移量以写入结尾。
关于c - O_APPEND标志和lseek,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24223661/