所以我有一个文件路径。如何检查它是否可执行? (UNIX,C++)有文件路径如何检查它是否可执行?
回答
你将不得不调用POSIX功能stat(2)
并检查stuct stat
对象st_mode
领域将填补英寸
你可能想看看stat
检查的权限(状态)位。
#include <sys/stat.h>
bool can_exec(const char *file)
{
struct stat st;
if (stat(file, &st) < 0)
return false;
if ((st.st_mode & S_IEXEC) != 0)
return true;
return false;
}
但这个答案“可以*某人*执行文件?”不是“可以*我*执行文件吗?”也许OP应该考虑[access(2)](http://linux.die.net/man/2/access)。 – 2011-04-19 16:52:18
这将在mac os x上运行吗? – Rella 2011-04-19 23:12:05
@Blender - 是的。 – 2011-04-20 13:57:57
访问(2):
#include <unistd.h>
if (! access (path_name, X_OK))
// executable
呼叫至STAT(2)具有更高的开销填写该结构。除非你需要额外的信息。
这可能是比我更好的解决方案;我忘记了access()'。 – 2011-04-19 17:01:39
你是说access()不是自己做一个stat()和getpid(),getuid(),getgid()?我会想象,开销几乎是相同的。 – 2014-06-09 00:13:48
access()的实现是未知的。但这不是我所说的 - 填写一个统计结构是有代价的。 – 2014-06-18 21:06:07
考虑使用access(2),检查用于相对于当前处理的uid权限和GID:
#include <unistd.h>
#include <stdio.h>
int can_exec(const char *file)
{
return !access(file, X_OK);
}
int main(int ac, char **av) {
while(av++,--ac) {
printf("%s: %s executable\n", *av, can_exec(*av)?"IS":"IS NOT");
}
}
这将在mac os x上工作吗? – Rella 2011-04-19 23:11:35
@Blender - 根据[developer.apple.com](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/access.2.html),是的,这将在Mac OS X上工作。 – 2011-04-20 13:53:15
有一个在人页的底部一个警告以进行访问(2):
CAVEAT Access()是一个潜在的安全漏洞,不应该被使用。
请记住,在调用access()与路径字符串的时间与尝试执行由路径字符串引用的文件的时间之间存在争用条件,文件系统可能会更改。如果这种竞争条件是一个问题,首先用open()打开文件并使用fstat()来检查权限。
我不确定open()/ fstat()会关闭手册页描述的争用条件。比赛是,在OP的情况下,该文件可以改变它在access()和execv()之间的可执行性。随着你的解决方案,它仍然可以在fstat()和execv()之间切换。我认为手册页作者的意图是你应该继续并调用execv() - 如果它失败了,那么你有你的答案。 – 2011-04-20 13:56:43
- 1. python:检查一个可执行文件是否在路径上?
- 2. 寻路:如何有效检查路径是否可行?
- 3. 查找可执行文件是否在路径中可用
- 4. 如何检查可执行文件的路径扩展
- 5. 如何找出路径是否导致可执行文件?
- 6. 如何检查文件路径是否有效
- 7. 如何检查路径是否指向文件夹或文件?
- 8. 可否在我的路径中查找可执行文件?
- 9. 检查文件路径是否可读可写
- 10. 如何检查文件在node.js中是否可执行?
- 11. 如何使用ANSI C检查文件是否可执行?
- 12. 如何检查文件在Lua中是否可执行?
- 13. 检查文件路径是否正确,但不检查文件是否存在
- 14. 是否有可能没有路径的可执行文件的名称?
- 15. 检查文件是否具有可执行权利Windows C++
- 16. 如何使用install4j查找系统可执行文件路径?
- 17. 如何检查一个文件夹是否在搜索路径
- 18. 如何检查路径是否指向本地文件对象?
- 19. 的Javascript检查文件是否可读可写或可执行
- 20. 检查路径是否有效
- 21. 检查文件是否同时执行
- 22. 如何检查是否使用可执行文件路径安装了Windows服务?
- 23. 检查是否存在具有绝对路径和相对路径的文件
- 24. 检查多个文件的完整路径是否有效
- 25. 安全检查路径和文件名是否对RegEx有效?
- 26. 如何检查文件路径是否是Android 7中的文件系统?
- 27. 的Python:如何检查是否路径的子路径
- 28. 检查可执行文件是用C#
- 29. 检查路径是否代表文件或文件夹
- 30. 如何验证是否可以使用Powershell执行路径?
“可执行文件”,这对您意味着什么?例如。 Python脚本文件(与#!/ usr/bin/python一样的shebang)? – 2011-04-19 16:41:24
你以前的帖子有重复吗? http://stackoverflow.com/questions/5719438/how-to-find-out-if-path-leads-to-executable-file – Void 2011-04-19 16:56:32