我试图对以写入模式打开的文件执行lseek(),如下所示。但它没有按预期工作。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
main()
{
int fd = open("/local/sandbox/.C/mytest", O_WRONLY | O_APPEND);
if(fd == -1)
{
printf("\nFailed to opne file in write mode\n");
return -1;
}
lseek(fd, 2, SEEK_SET);
write(fd, "OK", 2);
write(fd, "AAAAAAAA", 3);
close(fd);
}
&#39; mytest的&#39;文件已经存在与内容&#34;嗨,你好吗&#34;。我想在执行程序后,我的测试将包含&#39; HiOKAAA,你好吗&#34;。但相反,它正在编写&#34; OKAAA&#34;在末尾。是因为O_APPEND标志?但即便如此,我使用lseek()将文件偏移量更改为&#39; 2&#39;只要。任何人都可以让我知道它失败的原因吗?
答案 0 :(得分:1)
是的,O_APPEND
选项导致此问题。来自open的POSIX规范:
O_APPEND
如果设置,则文件偏移量应设置为每次写入之前文件的末尾。
如果您希望能够写入文件中的任意位置,请不要使用O_APPEND
模式。