avoir un chemin pour classer comment vérifier s’il est exécutable?

J’ai donc un chemin pour classer. Comment vérifier si c’est exécutable? (unix, C ++)

Vérifiez les permissions (status) bits.

#include  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; } 

access (2):

 #include  if (! access (path_name, X_OK)) // executable 

Les appels à stat (2) ont des frais généraux plus élevés qui remplissent la structure. À moins bien sûr que vous ayez besoin de ces informations supplémentaires.

Il y a une mise en garde au bas de la page de manuel pour l’access (2):

CAVEAT Access () est un trou de sécurité potentiel et ne doit jamais être utilisé.

Gardez à l’esprit qu’une condition de concurrence existe entre le moment où vous appelez access () avec une chaîne de chemin et le moment où vous essayez d’exécuter le fichier référencé par la chaîne de chemin, le système de fichiers peut changer. Si cette situation est préoccupante, ouvrez d’abord le fichier avec open () et utilisez fstat () pour vérifier les permissions.

Vous devrez appeler la fonction POSIX stat(2) et examiner le champ st_mode de l’object stuct stat qu’il remplirait.

Vous voulez probablement regarder stat

Pensez à utiliser access (2) , qui vérifie les permissions relatives à l’UID et au gid du processus en cours:

 #include  #include  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"); } }