1

我的 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)or unlink(/home/me/myfile),可以在我的程序中删除该文件。

4

1 回答 1

3

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

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

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

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

于 2012-05-04T16:10:39.040 回答