不能删除(rm)c程序中的文件,但可以在shell中

时间:2012-05-04 16:03:40

标签: c linux rm

我的C程序(在Linux上)需要删除一个文件,比如/ home / me / myfile,这是我在程序中的操作方式

...
system ("rm -f /home/me/myfile");
...

运行此程序时,我收到一条消息,说明权限已被拒绝。顺便说一句,ls -al /home/me/myfile返回-rw-r--r--

但是,在相同的用户帐户和同一个shell中我执行C程序,我可以通过键入rm -f /home/me/myfile

来简单地删除该文件

我在这里想念的是什么?

谢谢,

更新:使用remove(/home/me/myfile)unlink(/home/me/myfile),可以在我的程序中删除该文件。

1 个答案:

答案 0 :(得分:3)

首先,目录上的权限控制您是否可以删除文件。

但是,尽管如此,在这两种情况之间有许多不同的东西可能会有所不同。您的程序可能以不同的用户身份运行(例如使用SETUID位),路径可能不同,导致运行不同的rm,程序可能会设置chroot监狱,以便它甚至不能再看到文件(虽然这可能表现为不同的错误),等等。可能性相当大。

但是,C提供删除文件的调用,称为unlink - 您应该优先使用它,然后检查errno

我建议在两种情况下检查which rm的输出,以及文件和可执行文件,所有者和权限的完整详细信息。