LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1250|回复: 1

为什么我用了O_APPEND在WRITE时不是在文件末尾追加?

[复制链接]
发表于 2010-5-19 21:17:15 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
    int fd;
    char buf_write[10]="abcdefghi";
    fd=open("/home/skiron/test",O_RDWR, O_APPEND);

    if (write(fd, buf_write, 10)!=10)
        printf("Error\n");
return 0;
}

在这个程序中test文件已经存在了,并写了一些东西在里面。
我以追加形式打开了它,但是在write时还是会覆盖文件开头的10个字节。这是为什么?
发表于 2010-5-20 08:35:08 | 显示全部楼层
Post by pdaliu;2091127
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
    int fd;
    char buf_write[10]="abcdefghi";
    fd=open("/home/skiron/test",O_RDWR, O_APPEND);

    if (write(fd, buf_write, 10)!=10)
        printf("Error\n");
return 0;
}

在这个程序中test文件已经存在了,并写了一些东西在里面。
我以追加形式打开了它,但是在write时还是会覆盖文件开头的10个字节。这是为什么?
open用法错了,改为"open=("/home/skiron/test", O_RDWR | O_APPEND, 0);"

O_APPEND和O_CREAT这些应该是在第二个参数或使用的。第三个参数是设置新文件权限的,只有当第二个参数中或有"O_CREAT"时才有意义
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表