C:删除功能删除所有文件?

时间:2010-01-31 21:45:54

标签: c chmod file-handling

我正在使用这样的东西:

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 个答案:

答案 0 :(得分:3)

删除文件只需要对目录进行写访问。

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

使用rm命令尝试!

答案 1 :(得分:3)

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

(如果目录中设置了粘滞位,那么您还必须是文件的所有者 - /tmp使用此项。)

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以使用getumask()功能并在致电remove()之前进行检查。