如果文件存在,则调用open()创建文件失败

时间:2014-12-13 21:16:48

标签: c file unix

我正在尝试创建一个C代码,它将创建一个我可以从中读取或写入的文件。此文件可能已存在,或需要从头开始创建。如果它已经存在于目录中,我希望它从头开始创建,换句话说,删除所有内容。

 FD = open("p.txt", O_RDWR | O_CREAT | O_TRUNC); 

我暂时尝试过使用它。我遇到了一个问题。如果该文件不存在,则创建该文件并返回肯定的文件描述符。

如果该文件已存在,则返回-1 FD。所以我一定错过了一面旗帜?

我认为O_TRUNC足以清除文件的内容吗?

2 个答案:

答案 0 :(得分:1)

FD = open("p.txt", O_RDWR | O_CREAT | O_TRUNC, 0644); 

答案 1 :(得分:0)

当Unix调用返回-1时,检查errno变量的值。它包含错误的原因。在您看到错误代码之前,不要猜测问题可能是什么。您可以致电strerrorperror以获取描述errno中存储的数值的消息。

另外,正如其他人所说,当您将O_CREAT传递给open时,您必须传递第三个参数,该参数决定了文件的权限(如果已创建)。 (如果你没有)

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>

int main() {
    int fd = open("p.txt", O_RDWR | O_CREAT | O_TRUNC, 0666);
    if (fd == -1) {
        perror("opening p.txt");
        exit(1);
    }
    /* … */
}