add: ctrl + c and ctrl + \
This commit is contained in:
parent
96f7108555
commit
e15216ce85
@ -1,10 +1,13 @@
|
|||||||
|
#include <signal.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "../cmd/cmd.h"
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "../signal/signal.h"
|
||||||
|
#include "../cmd/cmd.h"
|
||||||
#include "../env/env.h"
|
#include "../env/env.h"
|
||||||
#include "../utils/utils.h"
|
#include "../utils/utils.h"
|
||||||
#include "../../lib/bozolib/bozolib.h"
|
#include "../../lib/bozolib/bozolib.h"
|
||||||
@ -30,13 +33,15 @@ int execute(lst** cmds, cmd_t* cmd, lst** env)
|
|||||||
dup2(cmd->output[0], 1);
|
dup2(cmd->output[0], 1);
|
||||||
dup2(cmd->input[0], 0);
|
dup2(cmd->input[0], 0);
|
||||||
lst_iter(cmds, &cmd_close);
|
lst_iter(cmds, &cmd_close);
|
||||||
|
signal(SIGINT, SIG_DFL);
|
||||||
|
signal(SIGQUIT, SIG_DFL);
|
||||||
execve(cmd->executable, cmd->args, env_str);
|
execve(cmd->executable, cmd->args, env_str);
|
||||||
dprintf(2, "execve failed\n");
|
dprintf(2, "execve failed\n");
|
||||||
free((void**)env_str);
|
free((void**)env_str);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
cmd->pid = pid;
|
cmd->pid = pid;
|
||||||
|
signal(SIGINT, SIG_IGN);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,5 +141,6 @@ int cmds_list_exec(lst** cmds, data_t *data)
|
|||||||
current = current->next;
|
current = current->next;
|
||||||
}
|
}
|
||||||
cmds_wait(cmds, data);
|
cmds_wait(cmds, data);
|
||||||
|
signal(SIGINT, ctrlc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
#include "./env/env.h"
|
|
||||||
#include "./input/input.h"
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include "./signal/signal.h"
|
||||||
|
#include "./input/input.h"
|
||||||
#include "alias/alias.h"
|
#include "alias/alias.h"
|
||||||
#include "cmd/cmd.h"
|
#include "cmd/cmd.h"
|
||||||
|
#include "./env/env.h"
|
||||||
#include "./exec/exec.h"
|
#include "./exec/exec.h"
|
||||||
#include "./parsing/parsing.h"
|
#include "./parsing/parsing.h"
|
||||||
#include "./data/data.h"
|
#include "./data/data.h"
|
||||||
@ -32,6 +35,8 @@ int main(int ac, char **av, char **env_str)
|
|||||||
lst_clear(data.env, &env_del);
|
lst_clear(data.env, &env_del);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
signal(SIGINT, ctrlc);
|
||||||
|
signal(SIGQUIT, SIG_IGN);
|
||||||
line = get_user_input(&data);
|
line = get_user_input(&data);
|
||||||
while (line != NULL)
|
while (line != NULL)
|
||||||
{
|
{
|
||||||
|
17
src/signal/signal.c
Normal file
17
src/signal/signal.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "./signal.h"
|
||||||
|
|
||||||
|
void ctrlc(int num)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
rl_replace_line("", 0);
|
||||||
|
rl_on_new_line();
|
||||||
|
rl_redisplay();
|
||||||
|
(void) num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void quit(int num)
|
||||||
|
{
|
||||||
|
(void) num;
|
||||||
|
// printf("Quit (core dumped)\n");
|
||||||
|
}
|
||||||
|
|
7
src/signal/signal.h
Normal file
7
src/signal/signal.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <readline/readline.h>
|
||||||
|
|
||||||
|
void quit(int num);
|
||||||
|
void ctrlc(int num);
|
Loading…
Reference in New Issue
Block a user