编写一个程序,使用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/

10-12 05:19