我正在使用这样的东西:
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
现在,我的程序删除了两个文件,但这不应该发生吗?任何人都知道代码有什么问题吗?
编辑:添加了将名称放入文件的代码......
好的......看起来一切都取决于目录上设置的权限,但是有没有办法将文件权限用作检查?
答案 0 :(得分:3)
删除文件只需要对目录进行写访问。
严格来说,你要删除的是对文件的引用,即硬链接。在文件的所有链接都消失之前,文件本身不会被删除。
使用rm命令尝试!
答案 1 :(得分:3)
在POSIX文件系统语义下,用于删除文件的权限检查是否可以写入文件所在的目录; 不您是否对文件本身具有写入权限。
(如果目录中设置了粘滞位,那么您还必须是文件的所有者 - /tmp
使用此项。)
答案 2 :(得分:1)
remove()
调用unlink()
,根据man 2 unlink
,只需要对父目录的写权限。
答案 3 :(得分:1)
您可以使用getumask()
功能并在致电remove()
之前进行检查。