gpt4 book ai didi

c++ - 如何使 open() 截断现有文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:38 28 4
gpt4 key购买 nike

我正在使用 open() 函数打开一个文件。

我希望 open() 函数丢弃文件内容(如果它已经存在),然后该文件被视为一个新的空文件。

我尝试了以下代码:

int open_file(char *filename)
{
int fd = -1;
fd = open(filename, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
if (fd < 0) {
printf("Couldn't create new file %s: %s\n",
filename, strerror(errno));
return -1;
}
close(fd);
return 0;
}

但是我得到了以下错误:

Couldn't create new file kallel333: File exists

我错过了什么?

最佳答案

请添加 O_TRUNcflags并删除 O_EXCL。

open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);

来自打开的手册页 -

O_EXCL 确保这个调用创建文件:如果这个标志是 与 O_CREAT 一起指定,并且路径名已经 存在,则 open() 将失败。

O_TRUNC 如果文件已经存在并且是一个普通文件并且 访问模式允许写入(即是 O_RDWR 或 O_WRONLY)它 将被截断到长度

关于c++ - 如何使 open() 截断现有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37946775/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com