From db5b7a582d3522b6350f2dee21ecd9237c3faa62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laure=CE=B7t?= Date: Wed, 21 Apr 2021 14:15:14 +0200 Subject: [PATCH] save --- jobs.c | 30 +++++++++--- jobs.h | 23 +++++----- minishell | Bin 32928 -> 32976 bytes minishell.c | 7 ++- readcmd.c | 129 ++++++++++++++++++++++++++++++++-------------------- readcmd.h | 13 +++--- 6 files changed, 124 insertions(+), 78 deletions(-) diff --git a/jobs.c b/jobs.c index 742bd62..a78ccc7 100644 --- a/jobs.c +++ b/jobs.c @@ -3,14 +3,13 @@ #include #include "jobs.h" -void ajouter(list *l_ptr, int pid, int id, char** seq) +void ajouter(list *l_ptr, int pid, int id, char **seq) { - cell* new_cell = malloc(sizeof(*new_cell)); + cell *new_cell = malloc(sizeof(*new_cell)); - - char* cmd; - cmd = malloc(sizeof(char)*256); + char *cmd; + cmd = malloc(sizeof(char) * 256); cmd[0] = '\0'; while (*seq) @@ -35,7 +34,7 @@ void ajouter(list *l_ptr, int pid, int id, char** seq) *l_ptr = new_cell; - printf("[%d] %d\n", id, pid); + printf("[%d] %d %s\n", id, pid, cmd); } void supprimer(list *l_ptr, int pid) @@ -47,6 +46,7 @@ void supprimer(list *l_ptr, int pid) { cell *cursor2free = cursor; *l_ptr = cursor->next; + printf("[%d] (%d) done: %s\n", cursor->id, cursor->pid, cursor->cmd); free(cursor2free); } else @@ -63,6 +63,7 @@ void supprimer(list *l_ptr, int pid) } } cell *cursor_next = cursor->next->next; + printf("[%d] (%d) done: %s\n", cursor->id, cursor->pid, cursor->cmd); free(cursor->next); cursor->next = cursor_next; } @@ -98,7 +99,6 @@ int est_vide(list l_ptr) int contiens(list *l_ptr, int pid) { - cell *cursor = *l_ptr; while (cursor != NULL) @@ -111,4 +111,20 @@ int contiens(list *l_ptr, int pid) } return 0; +} + +cell *trouver(list *l_ptr, int pid) +{ + cell *cursor = *l_ptr; + + while (cursor != NULL) + { + if (cursor->pid == pid) + { + return cursor; + } + cursor = cursor->next; + } + + return NULL; // erreur } \ No newline at end of file diff --git a/jobs.h b/jobs.h index 2600795..2b54d0a 100644 --- a/jobs.h +++ b/jobs.h @@ -2,21 +2,22 @@ #define __JOBS_H typedef struct cell cell; -struct cell { +struct cell +{ int id; int pid; - char* cmd; - cell* next; + char *cmd; + cell *next; }; -typedef cell* list; +typedef cell *list; -void ajouter(cell** list, int pid, int id, char** cmd); -void supprimer(cell** list, int pid); -void afficher(cell** list); -void initialiser(list* list); -void liberer(list* list); -int contiens(list* l_ptr, int pid); -cell* trouver(list* l_ptr, int pid); +void ajouter(cell **list, int pid, int id, char **cmd); +void supprimer(cell **list, int pid); +void afficher(cell **list); +void initialiser(list *list); +void liberer(list *list); +int contiens(list *l_ptr, int pid); +cell *trouver(list *l_ptr, int pid); #endif \ No newline at end of file diff --git a/minishell b/minishell index 3eed0f9098bf235cc79798832f0673fcc6f01ece..f94d9cf152a9461318f332ab16b98b69097be465 100755 GIT binary patch delta 10290 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 G{{H|bwdA7! diff --git a/minishell.c b/minishell.c index 636ee0d..f9a49fd 100644 --- a/minishell.c +++ b/minishell.c @@ -15,6 +15,7 @@ int prompting = 0; int job_id = 1; list jobs; pid_t pidFils; +struct cmdline *cmd; jmp_buf start; @@ -27,8 +28,6 @@ void handler_print(int signal_num, siginfo_t *info) printf("\n"); } - // TODO: trouver id, cmd... à partir pid - printf("[%d] --> (%d) %s\n", info->si_pid, signal_num, strsignal(signal_num)); supprimer(&jobs, info->si_pid); job_id--; @@ -50,7 +49,7 @@ void handler_stop(int signal_num, siginfo_t *info) if (!prompting) { kill(pidFils, SIGTSTP); - //ajouter(&jobs, pidFils, job_id++, cmd); + ajouter(&jobs, pidFils, job_id++, *(cmd->seq)); siglongjmp(start, signal_num); } else @@ -93,7 +92,7 @@ int main(int argc, char *argv[]) printf("%s >>> ", currentcd); prompting = 1; - struct cmdline *cmd = readcmd(); + cmd = readcmd(); prompting = 0; if (cmd == NULL) diff --git a/readcmd.c b/readcmd.c index a9e8926..a06ca58 100755 --- a/readcmd.c +++ b/readcmd.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2002, Simon Nieuviarts */ - + /* * Backgrounding added. [PM] Ajout d'une rustine nécessaire : lignes 153 et 293 commentées */ @@ -14,7 +14,6 @@ #include #include "readcmd.h" - static void memory_error(void) { errno = ENOMEM; @@ -22,49 +21,52 @@ static void memory_error(void) exit(1); } - static void *xmalloc(size_t size) { void *p = malloc(size); - if (!p) memory_error(); + if (!p) + memory_error(); return p; } - static void *xrealloc(void *ptr, size_t size) { void *p = realloc(ptr, size); - if (!p) memory_error(); + if (!p) + memory_error(); return p; } - /* Read a line from standard input and put it in a char[] */ static char *readline(void) { size_t buf_len = 16; char *buf = xmalloc(buf_len * sizeof(char)); - if (fgets(buf, buf_len, stdin) == NULL) { + if (fgets(buf, buf_len, stdin) == NULL) + { free(buf); return NULL; } - do { + do + { size_t l = strlen(buf); - if ((l > 0) && (buf[l-1] == '\n')) { + if ((l > 0) && (buf[l - 1] == '\n')) + { l--; buf[l] = 0; return buf; } - if (buf_len >= (INT_MAX / 2)) memory_error(); + if (buf_len >= (INT_MAX / 2)) + memory_error(); buf_len *= 2; buf = xrealloc(buf, buf_len * sizeof(char)); - if (fgets(buf + l, buf_len - l, stdin) == NULL) return buf; + if (fgets(buf + l, buf_len - l, stdin) == NULL) + return buf; } while (1); } - /* Split the string in words, according to the simple shell grammar. */ static char **split_in_words(char *line) { @@ -73,10 +75,12 @@ static char **split_in_words(char *line) size_t l = 0; char c; - while ((c = *cur) != 0) { + while ((c = *cur) != 0) + { char *w = 0; char *start; - switch (c) { + switch (c) + { case ' ': case '\t': /* Ignore any whitespace */ @@ -101,9 +105,11 @@ static char **split_in_words(char *line) default: /* Another word */ start = cur; - while (c) { + while (c) + { c = *++cur; - switch (c) { + switch (c) + { case 0: case ' ': case '\t': @@ -113,14 +119,15 @@ static char **split_in_words(char *line) case '&': c = 0; break; - default: ; + default:; } } w = xmalloc((cur - start + 1) * sizeof(char)); strncpy(w, start, cur - start); w[cur - start] = 0; } - if (w) { + if (w) + { tab = xrealloc(tab, (l + 1) * sizeof(char *)); tab[l++] = w; } @@ -130,31 +137,33 @@ static char **split_in_words(char *line) return tab; } - static void freeseq(char ***seq) { int i, j; - for (i=0; seq[i]!=0; i++) { + for (i = 0; seq[i] != 0; i++) + { char **cmd = seq[i]; - for (j=0; cmd[j]!=0; j++) free(cmd[j]); + for (j = 0; cmd[j] != 0; j++) + free(cmd[j]); free(cmd); } free(seq); } - /* Free the fields of the structure but not the structure itself */ static void freecmd(struct cmdline *s) { - if (s->in) free(s->in); - if (s->out) free(s->out); -// if (s->backgrounded) free(s->backgrounded); - if (s->seq) freeseq(s->seq); + if (s->in) + free(s->in); + if (s->out) + free(s->out); + // if (s->backgrounded) free(s->backgrounded); + if (s->seq) + freeseq(s->seq); } - struct cmdline *readcmd(void) { static struct cmdline *static_cmdline = 0; @@ -168,8 +177,10 @@ struct cmdline *readcmd(void) size_t cmd_len, seq_len; line = readline(); - if (line == NULL) { - if (s) { + if (line == NULL) + { + if (s) + { freecmd(s); free(s); } @@ -197,22 +208,27 @@ struct cmdline *readcmd(void) s->seq = 0; i = 0; - while ((w = words[i++]) != 0) { - switch (w[0]) { + while ((w = words[i++]) != 0) + { + switch (w[0]) + { case '&': - if(s->backgrounded){ - s->err = "error on &"; - goto error; + if (s->backgrounded) + { + s->err = "error on &"; + goto error; } s->backgrounded = &w[0]; break; case '<': /* Tricky : the word can only be "<" */ - if (s->in) { + if (s->in) + { s->err = "only one input file supported"; goto error; } - if (words[i] == 0) { + if (words[i] == 0) + { s->err = "filename missing for input redirection"; goto error; } @@ -220,11 +236,13 @@ struct cmdline *readcmd(void) break; case '>': /* Tricky : the word can only be ">" */ - if (s->out) { + if (s->out) + { s->err = "only one output file supported"; goto error; } - if (words[i] == 0) { + if (words[i] == 0) + { s->err = "filename missing for output redirection"; goto error; } @@ -232,7 +250,8 @@ struct cmdline *readcmd(void) break; case '|': /* Tricky : the word can only be "|" */ - if (cmd_len == 0) { + if (cmd_len == 0) + { s->err = "misplaced pipe"; goto error; } @@ -252,22 +271,28 @@ struct cmdline *readcmd(void) } } - if (cmd_len != 0) { + if (cmd_len != 0) + { seq = xrealloc(seq, (seq_len + 2) * sizeof(char **)); seq[seq_len++] = cmd; seq[seq_len] = 0; - } else if (seq_len != 0) { + } + else if (seq_len != 0) + { s->err = "misplaced pipe"; i--; goto error; - } else + } + else free(cmd); free(words); s->seq = seq; return s; error: - while ((w = words[i++]) != 0) { - switch (w[0]) { + while ((w = words[i++]) != 0) + { + switch (w[0]) + { case '<': case '>': case '|': @@ -279,18 +304,22 @@ error: } free(words); freeseq(seq); - for (i=0; cmd[i]!=0; i++) free(cmd[i]); + for (i = 0; cmd[i] != 0; i++) + free(cmd[i]); free(cmd); - if (s->in) { + if (s->in) + { free(s->in); s->in = 0; } - if (s->out) { + if (s->out) + { free(s->out); s->out = 0; } - if (s->backgrounded) { -// free(s->backgrounded); + if (s->backgrounded) + { + // free(s->backgrounded); s->out = 0; } return s; diff --git a/readcmd.h b/readcmd.h index 75b5bbd..abe5f81 100755 --- a/readcmd.h +++ b/readcmd.h @@ -14,13 +14,14 @@ struct cmdline *readcmd(void); * - en cas d'appels successifs, * readcmd() réutilise la mémoire allouée à la structure cmdline qu'elle retourne */ -struct cmdline { - char *err; /* Si non null : message d'erreur à afficher. +struct cmdline +{ + char *err; /* Si non null : message d'erreur à afficher. * Dans ce cas, les autres champs sont nuls. */ - char *in; /* Si non null : nom du fichier vers lequel l'entrée doit être redirigée. */ - char *out; /* Si non null : nom du fichier vers lequel la sortie doit être redirigée. */ - char *backgrounded; /* Si non null : commande en tâche de fond */ - char ***seq; /* Une ligne de commande est une suite de commandes liées par des tubes + char *in; /* Si non null : nom du fichier vers lequel l'entrée doit être redirigée. */ + char *out; /* Si non null : nom du fichier vers lequel la sortie doit être redirigée. */ + char *backgrounded; /* Si non null : commande en tâche de fond */ + char ***seq; /* Une ligne de commande est une suite de commandes liées par des tubes * Ainsi, * - une commande est un tableau de chaînes de caractères (char **). * Chaque élément de ce tableau est en effet une chaîne (char *)