2

我正在使用这样的东西:

char *file;
file = (char *)malloc(BUFSIZE * sizeof(char));
printf("Enter the filename:");
scanf("%s", file);
if(remove(file)) {
   printf("Error while removing");
}

我创建了两个文件:

touch filetobedeleted1.txt
chmod 777 filetobedeleted1.txt

touch filetobedeleted2.txt
chmod 444 filetobedeleted2.txt

现在,我的程序删除了这两个文件,但这不应该发生吗?有人知道代码有什么问题吗?

编辑:添加了将名称放入文件的代码...

好的......看起来这一切都取决于目录上设置的权限,但是有没有办法使用文件权限作为检查?

4

4 回答 4

3

删除文件只需要对该目录的写访问权。

严格来说,您要删除的是对文件的引用,即硬链接。在文件的所有链接都消失之前,文件本身不会被删除。

用 rm 命令试试!

于 2010-01-31T21:51:36.467 回答
3

在 POSIX 文件系统语义下,用于删除文件的权限检查是是否可以写入文件所在的目录;不是你是否对文件本身有写权限。

(如果目录设置了粘性位,那么您也必须是文件的所有者 -/tmp使用它)。

于 2010-01-31T21:52:16.390 回答
1

remove()调用unlink(),并根据man 2 unlink,只需要对目录的写权限。

于 2010-01-31T21:53:54.770 回答
1

您可以使用该getumask()功能并在调用之前对其进行检查remove()

于 2010-01-31T21:58:37.557 回答