execute.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * File: execute.c
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 9 novembre 2018
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <unistd.h>
  10. #include <sys/types.h>
  11. #include <wait.h>
  12. #include "error.h"
  13. #include "execute.h"
  14. /* --- Extern --- */
  15. extern Error error;
  16. /* --- Fonctions publiques --- */
  17. boolean is_executable_file(const char * cmd) {
  18. int result;
  19. result = access(cmd, X_OK);
  20. if(result == ERR){
  21. return false;
  22. }
  23. return true;
  24. }
  25. int exec_shell(char* name, char** argv){
  26. pid_t pid;
  27. int result;
  28. //Fork pour l'exec
  29. pid = fork();
  30. if(pid == ERR){
  31. addperror("Erreur lors du fork pour la commande execvp");
  32. return EXIT_FAILURE;
  33. }
  34. //Fils
  35. else if(pid == 0){
  36. //Reset sortie erreur
  37. result = redirect_fd(STDERR, error.errfd);
  38. if(result == ERR){
  39. adderror("Impossible de redefinir la sortie d'erreur standard");
  40. exit(EXIT_FAILURE);
  41. }
  42. //Execute commande
  43. execvp(name, argv);
  44. //Si on arrive ici alors erreur
  45. addperror("Impossible d'executer la commande");
  46. exit(EXIT_FAILURE);
  47. }
  48. //Pere
  49. wait(&result);
  50. //Retourne retour fils
  51. if(WIFEXITED(result)){
  52. return WEXITSTATUS(result);
  53. }
  54. return EXIT_FAILURE;
  55. }
  56. int exec_file(char* name, char** argv){
  57. return 1;
  58. }