我的 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)
,可以在我的程序中删除文件。
最佳答案
首先,控制您是否可以删除文件的是目录的权限。
但是,话虽如此,这两种情况之间有很多不同之处。您的程序可能以不同的用户身份运行(例如使用 SETUID 位),路径可能不同,导致运行不同的 rm
,程序可能会设置 chroot
jail ,这样它就再也看不到文件了(尽管这可能表现为一个不同的错误),等等。可能性比较大。
但是,C 提供了一个删除文件的调用,称为 unlink
- 您应该优先使用它,然后检查 errno
。
我建议在这两种情况下检查 which rm
的输出,以及文件和可执行文件、所有者和权限的完整详细信息。
关于无法删除(rm)c程序中的文件但可以在shell中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452319/