12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*
- * File: execute.c
- * Author: Arthur Brandao
- *
- * Created on 9 novembre 2018
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <wait.h>
- #include "error.h"
- #include "execute.h"
- /* --- Extern --- */
- extern Error error;
- /* --- Fonctions publiques --- */
- boolean is_executable_file(const char * cmd) {
- int result;
- result = access(cmd, X_OK);
- if(result == ERR){
- return false;
- }
- return true;
- }
- int exec_shell(char* name, char** argv){
- pid_t pid;
- int result;
- //Fork pour l'exec
- pid = fork();
- if(pid == ERR){
- addperror("Erreur lors du fork pour la commande execvp");
- return EXIT_FAILURE;
- }
- //Fils
- else if(pid == 0){
- //Reset sortie erreur
- result = redirect_fd(STDERR, error.errfd);
- if(result == ERR){
- adderror("Impossible de redefinir la sortie d'erreur standard");
- exit(EXIT_FAILURE);
- }
- //Execute commande
- execvp(name, argv);
- //Si on arrive ici alors erreur
- addperror("Impossible d'executer la commande");
- exit(EXIT_FAILURE);
- }
- //Pere
- wait(&result);
- //Retourne retour fils
- if(WIFEXITED(result)){
- return WEXITSTATUS(result);
- }
- return EXIT_FAILURE;
- }
- int exec_file(char* name, char** argv){
- pid_t pid;
- int result;
- //Fork pour l'exec
- pid = fork();
- if(pid == ERR){
- addperror("Erreur lors du fork pour la commande execvp");
- return EXIT_FAILURE;
- }
- //Fils
- else if(pid == 0){
- //Reset sortie erreur
- result = redirect_fd(STDERR, error.errfd);
- if(result == ERR){
- adderror("Impossible de redefinir la sortie d'erreur standard");
- exit(EXIT_FAILURE);
- }
- //Execute commande
- execv(name, argv);
- //Si on arrive ici alors erreur
- addperror("Impossible d'executer la commande");
- exit(EXIT_FAILURE);
- }
- //Pere
- wait(&result);
- //Retourne retour fils
- if(WIFEXITED(result)){
- return WEXITSTATUS(result);
- }
- return EXIT_FAILURE;
- }
|