From c5b6f8f53eafc422f58d58a56908fcf04ddb320c Mon Sep 17 00:00:00 2001 From: tomoron Date: Mon, 25 Mar 2024 20:41:05 +0100 Subject: [PATCH] signaux --- srcs/here_doc.c | 7 +++---- srcs/main.c | 30 +++++++++++++++++++++++++++++- srcs/minishell.h | 3 ++- srcs/signal_handler.c | 20 +++++++++----------- 4 files changed, 43 insertions(+), 17 deletions(-) diff --git a/srcs/here_doc.c b/srcs/here_doc.c index 743c54e..cf98993 100644 --- a/srcs/here_doc.c +++ b/srcs/here_doc.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/24 17:44:32 by marde-vr #+# #+# */ -/* Updated: 2024/03/25 19:14:46 by tomoron ### ########.fr */ +/* Updated: 2024/03/25 20:38:21 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -85,7 +85,6 @@ void get_here_doc_input(t_msh *msh, char *eof) line = NULL; signal(SIGINT, signal_handler_here_doc); - signal(SIGQUIT, signal_handler_here_doc); while (1) { free(line); @@ -131,10 +130,10 @@ void handle_here_doc(t_msh *msh, char *eof) else { signal(SIGINT, signal_handler_command); - signal(SIGQUIT, signal_handler_command); + signal(SIGQUIT, signal_handler_here_doc); waitpid(pid, &status , 0); signal(SIGINT, signal_handler_interactive); - signal(SIGQUIT, signal_handler_interactive); + signal(SIGQUIT, signal_handler_interactive); close(msh->in_fd); if(WIFEXITED(status) && WEXITSTATUS(status)) unlink(here_doc_file); diff --git a/srcs/main.c b/srcs/main.c index df2702a..dac550f 100755 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/02 21:59:20 by tomoron #+# #+# */ -/* Updated: 2024/03/25 13:19:26 by tomoron ### ########.fr */ +/* Updated: 2024/03/25 20:04:03 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -71,8 +71,31 @@ t_env *get_env(char **envp) return (env); } +void print_binary(unsigned int num) +{ + if (num == 0) { + printf("0"); + return; + } + + // Taille d'un unsigned int en bits + int size = sizeof(unsigned int) * 8; + int i; + + // Parcours de chaque bit de droite à gauche + for (i = size - 1; i >= 0; i--) { + // Vérifie si le bit est 1 ou 0 + if (num & (1u << i)) + printf("1"); + else + printf("0"); + } +} + int init_minishell(t_msh **msh, int argc, char **argv, char **envp) { + struct termios t_p; + *msh = ft_calloc(1, sizeof(t_msh)); if (!*msh) ft_exit(*msh, 1); @@ -81,6 +104,11 @@ int init_minishell(t_msh **msh, int argc, char **argv, char **envp) (*msh)->env = get_env(envp); signal(SIGINT, signal_handler_interactive); signal(SIGQUIT, signal_handler_interactive); + if(tcgetattr(1, &t_p)) + ft_printf_fd(2, "an error occured while setting the flags"); + t_p.c_lflag = t_p.c_lflag & (~ECHOCTL); + if(tcsetattr(1, TCSANOW, &t_p)) + ft_printf_fd(2, "an error occured while setting the flags"); return (0); } diff --git a/srcs/minishell.h b/srcs/minishell.h index 80dc022..f8005c0 100755 --- a/srcs/minishell.h +++ b/srcs/minishell.h @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */ -/* Updated: 2024/03/25 18:42:00 by tomoron ### ########.fr */ +/* Updated: 2024/03/25 19:37:11 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,6 +23,7 @@ # include # include # include +# include typedef enum e_token_type { diff --git a/srcs/signal_handler.c b/srcs/signal_handler.c index e9d7331..6c9591f 100644 --- a/srcs/signal_handler.c +++ b/srcs/signal_handler.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/22 14:31:13 by tomoron #+# #+# */ -/* Updated: 2024/03/25 19:10:39 by tomoron ### ########.fr */ +/* Updated: 2024/03/25 20:39:21 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,19 +14,16 @@ void signal_handler_interactive(int signum) { - if (signum == 2) + if (signum == SIGINT) { g_return_code = 130; - ft_putstr_fd("\n", 1); + printf("%s%s^C\n",rl_prompt, rl_line_buffer); rl_replace_line("", 0); rl_on_new_line(); rl_redisplay(); } - if (signum == 3) - { - rl_redisplay(); - ft_putstr_fd("filsdeup", 1); - } + else if (signum == SIGQUIT) + printf("%s%s", rl_prompt, rl_line_buffer); } void *here_doc_variables(int write, int index, void *data) @@ -45,9 +42,9 @@ void signal_handler_here_doc(int signum) t_msh *msh; char *here_doc_file; - if(signum == 2) + if(signum == SIGINT) { - write(1,"\n",1); + printf("%s%s^C\n",rl_prompt, rl_line_buffer); msh = here_doc_variables(0, 0, 0); here_doc_file = here_doc_variables(0, 1, 0); close(msh->in_fd); @@ -59,5 +56,6 @@ void signal_handler_here_doc(int signum) void signal_handler_command(int signum) { - (void)signum; + if(signum == SIGQUIT) + printf("^\\Quit (core dumped)\n"); }