我目前正在使用以下行来获取文件描述符:
int fd = open(file_name, O_RDWR | O_APPEND | O_CREAT);
但是当文件已经存在时它会失败(** fd = -1 with Error: permission denied**)。我正在使用 access() 函数来查看文件是否已经存在:
if (access(file_name, F_OK) != -1)
{
printf("file %s already exists! \n", file_name);
remove(file_name); /* delete the existing file */
fd = open(file_name, O_RDWR | O_APPEND | O_CREAT);
}
对于以下两种场景,有没有更好的方式使用open()函数获取文件描述符:
- 如果文件不存在,创建它并返回一个文件描述符
- 如果文件存在,删除它并创建一个新文件,然后返回一个文件描述符。
最佳答案
if the file exists, delete it and create a new file, then return a file descriptor.
open()
不支持。最接近的是 O_TRUNC
,它截断文件(如果存在),但没有删除O_ 标志> 文件(如果存在),并且您需要文件的写入权限才能截断它。
正如其他人所指出的,您可能想要解决的真正问题是您缺少文件的写入权限。如果你拥有这个文件,如果你想写入它,你应该改变权限;如果您不拥有该文件,那么所有者可能不希望您写入,因此您不应该写入。
关于c - 如何使用 C 中的 open() 函数删除现有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23173155/