我的C程序如何检查它是否具有给定文件的执行权限?

lad*_*ini 4 c linux permissions execution

有没有办法确定进程是否可以执行文件而不必实际执行它(例如通过execv(filepath, args)仅调用失败并发现它errno == EACCES)?

我可以stat在文件中观察st_mode,但后来我仍然不知道这个过程是怎么回事.

理想情况下,我正在寻找一个功能

get_me_permissions(filepath, &status); // me: the process calling this function
// when decoded, status tells if the process can read, write, and/or execute 
// the file given by filepath.
Run Code Online (Sandbox Code Playgroud)

提前致谢.

R..*_*R.. 6

假设您的最终目标是最终执行该程序,则不会.这个测试没用,因为即使在使函数返回之前,结果也可能出错!您必须准备好处理execve由于权限错误导致的失败.

正如史蒂夫·杰索普指出,检查给定文件是否为可执行文件可以在某些情况下,有用的,如文件列表(ls -l)或视觉文件管理器.人们当然可以想到更多深奥的用法,例如使用文件的权限位进行进程间通信(作为一种不需要任何资源分配的方法很有趣),但我怀疑stat("权限位设置为什么?" )而不是access("调用进程是否具有X权限?")更可能是一个有趣的问题......

  • 欲了解更多信息:http://en.wikipedia.org/wiki/Time-of-check-to-time-of-use (3认同)

Ste*_*sop 5

http://linux.die.net/man/2/access

请注意suid周围的细微窍门 - 如果进程具有有效的超级用户权限,则不予考虑,因为该函数的一般思想是检查原始调用用户是否应该有权访问该文件,而不是检查此进程是否有效可以访问该文件.