How to check if file is executable in C++?
So I have开发者_如何学编程 a path to file. How to check if it is executable? (unix, C++)
access(2):
#include <unistd.h>
if (! access (path_name, X_OK))
// executable
Calls to stat(2) have higher overhead filling out the struct. Unless of course you need that extra information.
Check the permissions (status) bits.
#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;
}
There is a caveat at the bottom of the man page for access(2):
CAVEAT Access() is a potential security hole and should never be used.
Keep in mind that a race condition exists between the time you call access() with a path string and the time you try to execute the file referred by the path string, the file system can change. If this race condition is a concern, first open the file with open() and use fstat() to check permissions.
You would have to call the POSIX function stat(2)
and examine st_mode
field of the stuct stat
object it would fill in.
You probably want to look at stat
Consider using access(2), which checks for permissions relative to the current process's uid and 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");
}
}
精彩评论