From 7c086ac01a860e1db0cbb3a353e3b55f394cbcb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laure=CE=B7t?= Date: Wed, 21 Apr 2021 16:18:53 +0200 Subject: [PATCH] stable shiiiiiit let's go --- minishell | Bin 33016 -> 32984 bytes minishell.c | 161 ++++++++++++++++++++-------------------- minishell.c.bak | 192 ++++++++++++++++++++++++++++++++++++++++++++++++ minishell2 | Bin 32520 -> 0 bytes minishell2.c | 155 -------------------------------------- 5 files changed, 275 insertions(+), 233 deletions(-) create mode 100644 minishell.c.bak delete mode 100755 minishell2 delete mode 100644 minishell2.c diff --git a/minishell b/minishell index 367476a3050533e4db6047a35b2fb4aa3bf11a1c..4ef753f9263845c9ac4a5238bb28bd565dbefce1 100755 GIT binary patch delta 9298 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 b(T&NXymhqIyGqyY7du-=tBvAZYtH`yI3l@c delta 9433 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 tDxLdo1)AF^tK2L1eJVyPwIJ`OMe*g%PAQb=r diff --git a/minishell.c b/minishell.c index 8df7cf8..5efdfe7 100644 --- a/minishell.c +++ b/minishell.c @@ -11,182 +11,187 @@ #include "readcmd.h" #include "jobs.h" -int prompting = 0; -int job_id = 1; -list jobs; -pid_t pidFils; +extern int errno; + struct cmdline *cmd; -jmp_buf start; +int pid_fils; -void handler_print(int signal_num, siginfo_t *info) +int job_id = 0; +list jobs; + +int prompting = 0; +jmp_buf goto_prompt; + +char initcd[256], currentcd[256]; + + + +void handler_sigchld(int sig_num, siginfo_t *info) { - cell* job = trouver(&jobs, info->si_pid); + cell *job = trouver(&jobs, info->si_pid); if (job) - { // pid dans la lite des proccess en fond - if (job->state) - { - job->state = 0; - siglongjmp(start, signal_num); - } - + { if (prompting) - { // si il n'y a pas d'execution de proccess actuellement + { printf("\n"); } - printf("[%d] (%d) done: %s\n", job->id, job->pid, job->cmd); + printf("[%d] %d done: %s\n", job->id, job->pid, job->cmd); supprimer(&jobs, job->pid); job_id--; if (prompting) - { // on réaffiche un prompt si besoin - siglongjmp(start, signal_num); + { + siglongjmp(goto_prompt, sig_num); } } } -void handler_restart(int signal_num) + + +void handler_sigint(int sig_num) { printf("\n"); - siglongjmp(start, signal_num); + siglongjmp(goto_prompt, sig_num); } -void handler_stop(int signal_num) + + +void handler_sigtstp(int sig_num) { if (!prompting) { - kill(pidFils, SIGTSTP); - ajouter(&jobs, pidFils, job_id++, *(cmd->seq), 1); - printf("[%d] (%d) suspended: %s\n", job_id, pidFils, *(cmd->seq)); - siglongjmp(start, signal_num); + kill(pid_fils, SIGTSTP); + ajouter(&jobs, pid_fils, ++job_id, *(cmd->seq), 1); + printf("[%d] %d suspended\n", job_id, pid_fils); + siglongjmp(goto_prompt, sig_num); } else { - handler_restart(signal_num); + handler_sigint(sig_num); } } + + +void handler_sigcont(int sig_num) +{ + +} + + int main(int argc, char *argv[]) { - extern int errno; - initialiser(&jobs); + getcwd(initcd, sizeof(initcd)); // gestion des signaux struct sigaction action; sigemptyset(&action.sa_mask); action.sa_flags = SA_SIGINFO | SA_RESTART; - action.sa_handler = handler_print; + action.sa_handler = handler_sigchld; sigaction(SIGCHLD, &action, NULL); - action.sa_handler = handler_restart; + action.sa_handler = handler_sigint; sigaction(SIGINT, &action, NULL); - action.sa_handler = handler_stop; + action.sa_handler = handler_sigtstp; sigaction(SIGTSTP, &action, NULL); - // variables pour afficher le path - char initcd[256], currentcd[256]; - getcwd(initcd, 256); - // loop principal while (1) { - if (sigsetjmp(start, 1) == 2) - { // si on provient du jump - continue; - } - - getcwd(currentcd, 256); - printf("%s >>> ", currentcd); + sigsetjmp(goto_prompt, 1); prompting = 1; + getcwd(currentcd, sizeof(currentcd)); + printf("%s >>> ", currentcd); cmd = readcmd(); prompting = 0; if (cmd == NULL) - { // on quitte le shell, EOF + { // EOF break; } else if (cmd->seq[0] == NULL) - { // ligne vide, on skip - continue; - } - else if (!strcmp(cmd->seq[0][0], "bg")) - { - kill(pidFils, SIGCONT); + { // empty continue; } else if (!strcmp(cmd->seq[0][0], "exit")) - { + { // "exit" break; } + else if (!strcmp(cmd->seq[0][0], "jobs")) + { // "jobs" + afficher(&jobs); + continue; + } else if (!strcmp(cmd->seq[0][0], "cd")) - { // cd + { // "cd" int ret = 0; if (cmd->seq[0][1] == NULL) - { // vide, sans path + { // no path ret = chdir(initcd); } else - { // avec un path + { // with path ret = chdir(cmd->seq[0][1]); } if (ret) - { // si le path n'existe pas + { // wrong path fprintf(stderr, "ERROR: cd failed, (%d) %s\n", errno, strerror(errno)); } continue; } - else if (!strcmp(cmd->seq[0][0], "jobs")) - { // on affiche tous les process de fond - afficher(&jobs); - continue; - } - pidFils = fork(); - - if (pidFils == -1) - { // si le fork échoue + pid_fils = fork(); + if (pid_fils == -1) + { // fork fail ? fprintf(stderr, "ERROR: forking failed, (%d) %s\n", errno, strerror(errno)); exit(errno); } - if (pidFils == 0) + if (pid_fils == 0) { // instructions du fils + action.sa_handler = SIG_DFL; + sigaction(SIGTSTP, &action, NULL); // on default SIGTSTP + sigaction(SIGCONT, &action, NULL); // on default SIGCONT + if (cmd->backgrounded) - { + { // background action.sa_handler = SIG_IGN; sigaction(SIGINT, &action, NULL); // on ignore SIGINT + sigaction(SIGTSTP, &action, NULL); // on ignore SIGTSTP + } + execvp(cmd->seq[0][0], cmd->seq[0]); exit(errno); // si execlp échoue on exit avec une erreur } else { // instructions du père if (cmd->backgrounded) - { // on sauvegarde le pid, si background - ajouter(&jobs, pidFils, job_id++, *(cmd->seq), 0); - printf("[%d] %d\n", job_id, pidFils); + { // background + ajouter(&jobs, pid_fils, ++job_id, *(cmd->seq), 0); + printf("[%d] %d\n", job_id, pid_fils); } else - { // on attend le fils, si foreground - int codeTerm; - pid_t idFils = waitpid(pidFils, &codeTerm, 0); // on attend la fin de l'exec du fils + { // foreground + int wait_code; + pid_t id_fils = waitpid(pid_fils, &wait_code, 0); // on attend la fin de l'exec du fils - if (idFils == -1) - { // si le wait fail - fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", codeTerm, errno, strerror(errno)); + if (id_fils == -1) + { // wait fail ? + fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", wait_code, errno, strerror(errno)); exit(errno); } - if (codeTerm) - { // si l'exec a échoué - fprintf(stderr, "ERROR: %d's execution failed, (%d) %s\n", pidFils, codeTerm, strerror(codeTerm)); + if (wait_code) + { // execvp fail ? + fprintf(stderr, "ERROR: %d's execution failed, (%d) %s\n", pid_fils, wait_code, strerror(wait_code)); } } } } - liberer(&jobs); return EXIT_SUCCESS; } \ No newline at end of file diff --git a/minishell.c.bak b/minishell.c.bak new file mode 100644 index 0000000..8df7cf8 --- /dev/null +++ b/minishell.c.bak @@ -0,0 +1,192 @@ +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include "readcmd.h" +#include "jobs.h" + +int prompting = 0; +int job_id = 1; +list jobs; +pid_t pidFils; +struct cmdline *cmd; + +jmp_buf start; + +void handler_print(int signal_num, siginfo_t *info) +{ + cell* job = trouver(&jobs, info->si_pid); + if (job) + { // pid dans la lite des proccess en fond + if (job->state) + { + job->state = 0; + siglongjmp(start, signal_num); + } + + if (prompting) + { // si il n'y a pas d'execution de proccess actuellement + printf("\n"); + } + + printf("[%d] (%d) done: %s\n", job->id, job->pid, job->cmd); + supprimer(&jobs, job->pid); + job_id--; + + if (prompting) + { // on réaffiche un prompt si besoin + siglongjmp(start, signal_num); + } + } +} + +void handler_restart(int signal_num) +{ + printf("\n"); + siglongjmp(start, signal_num); +} + +void handler_stop(int signal_num) +{ + if (!prompting) + { + kill(pidFils, SIGTSTP); + ajouter(&jobs, pidFils, job_id++, *(cmd->seq), 1); + printf("[%d] (%d) suspended: %s\n", job_id, pidFils, *(cmd->seq)); + siglongjmp(start, signal_num); + } + else + { + handler_restart(signal_num); + } +} + +int main(int argc, char *argv[]) +{ + extern int errno; + + initialiser(&jobs); + + // gestion des signaux + struct sigaction action; + sigemptyset(&action.sa_mask); + action.sa_flags = SA_SIGINFO | SA_RESTART; + action.sa_handler = handler_print; + sigaction(SIGCHLD, &action, NULL); + action.sa_handler = handler_restart; + sigaction(SIGINT, &action, NULL); + action.sa_handler = handler_stop; + sigaction(SIGTSTP, &action, NULL); + + // variables pour afficher le path + char initcd[256], currentcd[256]; + getcwd(initcd, 256); + + // loop principal + while (1) + { + if (sigsetjmp(start, 1) == 2) + { // si on provient du jump + continue; + } + + getcwd(currentcd, 256); + printf("%s >>> ", currentcd); + + prompting = 1; + cmd = readcmd(); + prompting = 0; + + if (cmd == NULL) + { // on quitte le shell, EOF + break; + } + else if (cmd->seq[0] == NULL) + { // ligne vide, on skip + continue; + } + else if (!strcmp(cmd->seq[0][0], "bg")) + { + kill(pidFils, SIGCONT); + continue; + } + else if (!strcmp(cmd->seq[0][0], "exit")) + { + break; + } + else if (!strcmp(cmd->seq[0][0], "cd")) + { // cd + int ret = 0; + if (cmd->seq[0][1] == NULL) + { // vide, sans path + ret = chdir(initcd); + } + else + { // avec un path + ret = chdir(cmd->seq[0][1]); + } + if (ret) + { // si le path n'existe pas + fprintf(stderr, "ERROR: cd failed, (%d) %s\n", errno, strerror(errno)); + } + continue; + } + else if (!strcmp(cmd->seq[0][0], "jobs")) + { // on affiche tous les process de fond + afficher(&jobs); + continue; + } + + pidFils = fork(); + + if (pidFils == -1) + { // si le fork échoue + fprintf(stderr, "ERROR: forking failed, (%d) %s\n", errno, strerror(errno)); + exit(errno); + } + + if (pidFils == 0) + { // instructions du fils + if (cmd->backgrounded) + { + action.sa_handler = SIG_IGN; + sigaction(SIGINT, &action, NULL); // on ignore SIGINT + } + execvp(cmd->seq[0][0], cmd->seq[0]); + exit(errno); // si execlp échoue on exit avec une erreur + } + else + { // instructions du père + if (cmd->backgrounded) + { // on sauvegarde le pid, si background + ajouter(&jobs, pidFils, job_id++, *(cmd->seq), 0); + printf("[%d] %d\n", job_id, pidFils); + } + else + { // on attend le fils, si foreground + int codeTerm; + pid_t idFils = waitpid(pidFils, &codeTerm, 0); // on attend la fin de l'exec du fils + + if (idFils == -1) + { // si le wait fail + fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", codeTerm, errno, strerror(errno)); + exit(errno); + } + + if (codeTerm) + { // si l'exec a échoué + fprintf(stderr, "ERROR: %d's execution failed, (%d) %s\n", pidFils, codeTerm, strerror(codeTerm)); + } + } + } + } + + liberer(&jobs); + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/minishell2 b/minishell2 deleted file mode 100755 index ddf8075b368b643d262d70b57a0cee810516f1ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32520 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 diff --git a/minishell2.c b/minishell2.c deleted file mode 100644 index ca2a181..0000000 --- a/minishell2.c +++ /dev/null @@ -1,155 +0,0 @@ -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include -#include -#include "readcmd.h" -#include "jobs.h" - -extern int errno; - -struct cmdline *cmd; - -int pid_fils; - -int job_id = 0; -list jobs; - -int prompting = 0; -jmp_buf goto_prompt; - -char initcd[256], currentcd[256]; - - - -void handler_sigchld(int signal_num, siginfo_t *info) -{ - cell *job = trouver(&jobs, info->si_pid); - if (job) - { - if (prompting) - { - printf("\n"); - } - - printf("[%d] %d done: %s\n", job->id, job->pid, job->cmd); - supprimer(&jobs, job->pid); - job_id--; - - if (prompting) - { - siglongjmp(goto_prompt, signal_num); - } - } -} - - - -int main(int argc, char *argv[]) -{ - initialiser(&jobs); - getcwd(initcd, sizeof(initcd)); - - // gestion des signaux - struct sigaction action; - sigemptyset(&action.sa_mask); - action.sa_flags = SA_SIGINFO | SA_RESTART; - action.sa_handler = handler_sigchld; - sigaction(SIGCHLD, &action, NULL); - - // loop principal - while (1) - { - sigsetjmp(goto_prompt, 1); - - prompting = 1; - getcwd(currentcd, sizeof(currentcd)); - printf("%s >>> ", currentcd); - cmd = readcmd(); - prompting = 0; - - if (cmd == NULL) - { // EOF - break; - } - else if (cmd->seq[0] == NULL) - { // empty - continue; - } - else if (!strcmp(cmd->seq[0][0], "exit")) - { // "exit" - break; - } - else if (!strcmp(cmd->seq[0][0], "jobs")) - { // "jobs" - afficher(&jobs); - continue; - } - else if (!strcmp(cmd->seq[0][0], "cd")) - { // "cd" - int ret = 0; - if (cmd->seq[0][1] == NULL) - { // no path - ret = chdir(initcd); - } - else - { // with path - ret = chdir(cmd->seq[0][1]); - } - if (ret) - { // wrong path - fprintf(stderr, "ERROR: cd failed, (%d) %s\n", errno, strerror(errno)); - } - continue; - } - - pid_fils = fork(); - if (pid_fils == -1) - { // fork fail ? - fprintf(stderr, "ERROR: forking failed, (%d) %s\n", errno, strerror(errno)); - exit(errno); - } - - if (pid_fils == 0) - { // instructions du fils - if (cmd->backgrounded) - { // background - action.sa_handler = SIG_IGN; - sigaction(SIGINT, &action, NULL); // on ignore SIGINT - } - execvp(cmd->seq[0][0], cmd->seq[0]); - exit(errno); // si execlp échoue on exit avec une erreur - } - else - { // instructions du père - if (cmd->backgrounded) - { // background - ajouter(&jobs, pid_fils, ++job_id, *(cmd->seq), 0); - printf("[%d] %d\n", job_id, pid_fils); - } - else - { // foreground - int wait_code; - pid_t id_fils = waitpid(pid_fils, &wait_code, 0); // on attend la fin de l'exec du fils - - if (id_fils == -1) - { // wait fail ? - fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", wait_code, errno, strerror(errno)); - exit(errno); - } - - if (wait_code) - { // execvp fail ? - fprintf(stderr, "ERROR: %d's execution failed, (%d) %s\n", pid_fils, wait_code, strerror(wait_code)); - } - } - } - } - - return EXIT_SUCCESS; -} \ No newline at end of file