Utiliser execl pour exécuter une commande Linux

Je dois répertorier tous les fichiers du répertoire en cours qui ont une autorisation de 644 en écrivant un programme en langage C. Je ne peux pas utiliser system() et utiliser execl() pour utiliser les appels système.

C’est une ligne que j’ai utilisée dans mon code:

 execl("/usr/bin/find", "find . -maxdepth 1 -perm 644", (char *)NULL); 

Le problème est que le code recherche le disque entier au lieu du répertoire en cours. Voulez-vous m’aider à le réparer s’il vous plaît?


  ... case 4: int status; switch (fork()){ case -1: quit ("fork",1); case 0: execl("/usr/bin/find","find","." ,"-maxdepth" ,"1","-perm", "644",(char *)NULL) ; exit (200); default: wait(&status); exit(0); } } 

Séparez les arguments:

 execl("/usr/bin/find", "find", ".", "-maxdepth", "1", "-perm", "644", (char *)NULL); 

Votre invocation était équivalente à invoquer le programme find sans arguments (et un argv[0] très amusant).

 execl("/usr/bin/find","/usr/bin/find", ".", "-maxdepth", "1", "-perm", "0644",(char *)NULL); 

Pour votre tâche particulière, l’utilisation de l’ arborescence de fichiers ( ftw ) est plus appropriée.

ftw est juste une bibliothèque, vous n’avez donc pas besoin de lancer des processus externes pour faire le travail. En outre, il est beaucoup plus facile d’parsingr les résultats.