无法删除(rm)c程序中的文件但可以在shell中

标签 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),可以在我的程序中删除文件。

最佳答案

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

但是,话虽如此,这两种情况之间有很多不同之处。您的程序可能以不同的用户身份运行(例如使用 SETUID 位),路径可能不同,导致运行不同的 rm,程序可能会设置 chroot jail ,这样它就再也看不到文件了(尽管这可能表现为一个不同的错误),等等。可能性比较大。

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

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

关于无法删除(rm)c程序中的文件但可以在shell中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452319/

相关文章:

python - 在 Python 中创建环境变量似乎不起作用

c++ - 蛋滴跟踪表

c - 外部存储类的理解

c - sprintf float 和 double 变量

linux - net.DialTCP 在 Linux 上产生 "connection refused"错误,但在 Windows 上没有

linux - 如何在 Ubuntu 中删除单符号垃圾 "file"?

c++ - 在 64 位中进行组合乘除运算的最准确方法是什么?

linux - 用于验证Linux上make版本的Shell脚本

linux - 使用 bash 命令删除除少数文件外的所有文件

linux - 删除很多目录的文件 - Linux