我正在尝试创建一个C代码,它将创建一个我可以从中读取或写入的文件。此文件可能已存在,或需要从头开始创建。如果它已经存在于目录中,我希望它从头开始创建,换句话说,删除所有内容。
FD = open("p.txt", O_RDWR | O_CREAT | O_TRUNC);
我暂时尝试过使用它。我遇到了一个问题。如果该文件不存在,则创建该文件并返回肯定的文件描述符。
如果该文件已存在,则返回-1 FD。所以我一定错过了一面旗帜?
我认为O_TRUNC足以清除文件的内容吗?
答案 0 :(得分:1)
FD = open("p.txt", O_RDWR | O_CREAT | O_TRUNC, 0644);
答案 1 :(得分:0)
当Unix调用返回-1时,检查errno
变量的值。它包含错误的原因。在您看到错误代码之前,不要猜测问题可能是什么。您可以致电strerror
或perror
以获取描述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);
}
/* … */
}