如何在C中使用open()函数删除现有文件?
我目前正在使用以下行获取文件描述符:如何在C中使用open()函数删除现有文件?,c,file,C,File,我目前正在使用以下行获取文件描述符: int fd = open(file_name, O_RDWR | O_APPEND | O_CREAT); 但当文件已经存在时,它会失败(**fd=-1,错误为:权限被拒绝**)。我正在使用access()函数查看文件是否已存在: if (access(file_name, F_OK) != -1) { printf("file %s already exists! \n", file_name); remove(file_name); /
int fd = open(file_name, O_RDWR | O_APPEND | O_CREAT);
但当文件已经存在时,它会失败(**fd=-1,错误为:权限被拒绝**)。我正在使用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()函数获取文件描述符:
开放系统调用在这两种情况下都有效,您可以在这两种情况下使用文档。此外,由于您没有权限打开文件或在运行程序的目录中创建文件,因此出现“权限被拒绝”错误,请尝试以sudo的身份运行该文件。 如果您不想处理系统调用,还有其他C库(它更高级,您不需要处理文件描述符),这里有这一个的文档:
注意:您还可以更改用户的权限,以便能够访问该文件或在目录上创建该文件。请参阅linux上的chmod命令。在您有文档的两种情况下,开放系统调用都有效。此外,由于您没有权限打开文件或在运行程序的目录中创建文件,因此出现“权限被拒绝”错误,请尝试以sudo的身份运行该文件。 如果您不想处理系统调用,还有其他C库(它更高级,您不需要处理文件描述符),这里有这一个的文档: 注意:您还可以更改用户的权限,以便能够访问该文件或在linux上的目录see chmod command上创建该文件 如果文件存在,请删除它并创建一个新文件,然后返回一个文件描述符
open()
不支持这一点。最接近这一点的是O_-TRUNC
,它会在文件存在时截断该文件,但没有O_
标志会在文件存在时删除该文件,您需要对该文件具有写入权限才能截断该文件
正如其他人所指出的,您可能想要解决的真正问题是缺少对文件的写入权限。如果您拥有该文件,则如果要写入该文件,则应更改权限;如果您不拥有该文件,可能所有者不希望您对其进行写入,因此您不应该对其进行写入
如果文件存在,请删除它并创建一个新文件,然后返回一个文件描述符
open()
不支持这一点。最接近这一点的是O_-TRUNC
,它会在文件存在时截断该文件,但没有O_
标志会在文件存在时删除该文件,您需要对该文件具有写入权限才能截断该文件
正如其他人所指出的,您可能想要解决的真正问题是缺少对文件的写入权限。如果您拥有该文件,则如果要写入该文件,则应更改权限;如果您没有该文件的所有者,那么可能所有者不希望您对其进行写入,因此您不应该对其进行写入。谢谢您的回复。 这一行代码解决了我的问题:
int fd = open(file_name, O_RDWR | O_APPEND | O_CREAT, 0777); /* change the file permission to 0777 */
谢谢你的回复。 这一行代码解决了我的问题:
int fd = open(file_name, O_RDWR | O_APPEND | O_CREAT, 0777); /* change the file permission to 0777 */
文件权限-您检查了吗?如果我将文件权限更改为0777,则不会报告错误。拒绝权限错误是因为您没有权限在执行程序的目录中打开或创建文件。尝试使用sudo运行它(如果可能的话)。功能开放也适用于您所说的场景。但是,如果您不想在低级别(使用文件描述符)中工作,可以使用此C标准库。虽然您可以对这两个文件执行您想要的操作。@TonyGW-是flle、目录、子目录等。为什么不成为该用户并使用shell命令
echo“hello”>hello.txt
更改文件的属性呢。您可能没有删除该文件的权限。文件权限-您检查过吗?如果我将文件权限更改为0777,则不会报告错误。拒绝权限错误是因为您没有权限在执行程序的目录中打开或创建该文件。尝试使用sudo运行它(如果可能的话)。功能开放也适用于您所说的场景。但是,如果您不想在低级别(使用文件描述符)中工作,可以使用此C标准库。虽然您可以对这两个文件执行您想要的操作。@TonyGW-是flle、目录、子目录等。为什么不成为该用户并使用shell命令echo“hello”>hello.txt
更改文件的属性呢。您可能没有删除该文件的权限。