nice
This commit is contained in:
parent
24e923855f
commit
c9a0342380
114
.testms
Normal file
114
.testms
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> bonjour, je suis un message vert de debug
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> à zipper
|
||||||
|
jobs.c
|
||||||
|
jobs.h
|
||||||
|
latex
|
||||||
|
Makefile
|
||||||
|
minishell
|
||||||
|
minishell.c
|
||||||
|
readcmd.c
|
||||||
|
readcmd.h
|
||||||
|
README.md
|
||||||
|
sujet.pdf
|
||||||
|
test1
|
||||||
|
test.sh
|
||||||
|
utils.c
|
||||||
|
utils.h
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> total 276K
|
||||||
|
drwxr-xr-x 6 laurent laurent 4.0K May 23 18:53 .
|
||||||
|
drwxrwxrwx 9 laurent laurent 4.0K May 5 08:07 ..
|
||||||
|
drwxr-xr-x 2 laurent laurent 4.0K May 23 16:32 à zipper
|
||||||
|
drwxr-xr-x 8 laurent laurent 4.0K May 23 16:28 .git
|
||||||
|
-rw-r--r-- 1 laurent laurent 2.6K May 23 18:12 jobs.c
|
||||||
|
-rw-r--r-- 1 laurent laurent 403 May 23 16:22 jobs.h
|
||||||
|
drwxr-xr-x 4 laurent laurent 4.0K Apr 25 20:56 latex
|
||||||
|
-rw-r--r-- 1 laurent laurent 205 May 10 15:49 Makefile
|
||||||
|
-rwxr-xr-x 1 laurent laurent 27K May 23 18:53 minishell
|
||||||
|
-rw-r--r-- 1 laurent laurent 7.2K May 23 18:51 minishell.c
|
||||||
|
-rwxr-xr-x 1 laurent laurent 5.0K Apr 21 14:03 readcmd.c
|
||||||
|
-rwxr-xr-x 1 laurent laurent 2.2K May 23 16:24 readcmd.h
|
||||||
|
-rwxr-xr-x 1 laurent laurent 2.1K Apr 13 10:42 README.md
|
||||||
|
-rw-r--r-- 1 laurent laurent 163K Apr 25 20:25 sujet.pdf
|
||||||
|
-rw-r--r-- 1 laurent laurent 1.9K May 23 16:41 test1
|
||||||
|
-rw-r--r-- 1 laurent laurent 452 May 23 18:53 .testms
|
||||||
|
-rw-r--r-- 1 laurent laurent 2.3K May 23 18:26 test.sh
|
||||||
|
-rw-r--r-- 1 laurent laurent 4.6K May 23 18:09 utils.c
|
||||||
|
-rw-r--r-- 1 laurent laurent 165 May 23 16:22 utils.h
|
||||||
|
drwxr-xr-x 2 laurent laurent 4.0K Apr 20 21:34 .vscode
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> -rwxr-xr-x 1 laurent laurent 27K May 23 18:53 minishell
|
||||||
|
-rw-r--r-- 1 laurent laurent 7.2K May 23 18:51 minishell.c
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> 2 18 116
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> -rw-r--r-- 1 laurent laurent 1.9K May 23 16:41 test1
|
||||||
|
drwxr-xr-x 6 laurent laurent 4.0K May 23 18:53 .
|
||||||
|
drwxrwxrwx 9 laurent laurent 4.0K May 5 08:07 ..
|
||||||
|
-rwxr-xr-x 1 laurent laurent 5.0K Apr 21 14:03 readcmd.c
|
||||||
|
-rw-r--r-- 1 laurent laurent 7.2K May 23 18:51 minishell.c
|
||||||
|
-rw-r--r-- 1 laurent laurent 2.6K May 23 18:12 jobs.c
|
||||||
|
-rw-r--r-- 1 laurent laurent 4.6K May 23 18:09 utils.c
|
||||||
|
-rwxr-xr-x 1 laurent laurent 2.1K Apr 13 10:42 README.md
|
||||||
|
drwxr-xr-x 2 laurent laurent 4.0K Apr 20 21:34 .vscode
|
||||||
|
-rw-r--r-- 1 laurent laurent 205 May 10 15:49 Makefile
|
||||||
|
-rw-r--r-- 1 laurent laurent 163K Apr 25 20:25 sujet.pdf
|
||||||
|
-rwxr-xr-x 1 laurent laurent 2.2K May 23 16:24 readcmd.h
|
||||||
|
-rw-r--r-- 1 laurent laurent 403 May 23 16:22 jobs.h
|
||||||
|
-rw-r--r-- 1 laurent laurent 165 May 23 16:22 utils.h
|
||||||
|
-rw-r--r-- 1 laurent laurent 2.3K May 23 18:26 test.sh
|
||||||
|
total 276K
|
||||||
|
-rwxr-xr-x 1 laurent laurent 27K May 23 18:53 minishell
|
||||||
|
drwxr-xr-x 2 laurent laurent 4.0K May 23 16:32 à zipper
|
||||||
|
-rw-r--r-- 1 laurent laurent 2.0K May 23 18:53 .testms
|
||||||
|
drwxr-xr-x 8 laurent laurent 4.0K May 23 16:28 .git
|
||||||
|
drwxr-xr-x 4 laurent laurent 4.0K Apr 25 20:56 latex
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>>
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>>
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>>
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [1] 30197
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [2] 30200
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [3] 30203
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [4] 30206
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [5] 30209
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [6] 30212
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [7] 30215
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [8] 30218
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [9] 30221
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [10] 30224
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [11] 30227
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [8] 30218 stopped: sleep 12
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [1] 30197 running: sleep 5
|
||||||
|
|
||||||
|
[1] 30197 stopped: sleep 5
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [1] 30197 continued: sleep 5
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> [1] 30197 : sleep 5
|
||||||
|
[2] 30200 : sleep 6
|
||||||
|
[3] 30203 : sleep 7
|
||||||
|
[4] 30206 : sleep 8
|
||||||
|
[5] 30209 : sleep 9
|
||||||
|
[6] 30212 : sleep 10
|
||||||
|
[7] 30215 : sleep 11
|
||||||
|
[8] 30218 : sleep 12
|
||||||
|
[9] 30221 : sleep 13
|
||||||
|
[10] 30224 : sleep 14
|
||||||
|
[11] 30227 : sleep 15
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[1] 30197 exited: sleep 5
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[2] 30200 exited: sleep 6
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[3] 30203 exited: sleep 7
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[4] 30206 exited: sleep 8
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[5] 30209 exited: sleep 9
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[6] 30212 exited: sleep 10
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[7] 30215 exited: sleep 11
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[9] 30221 exited: sleep 13
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[10] 30224 exited: sleep 14
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
||||||
|
[11] 30227 exited: sleep 15
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés >>>
|
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
|
@ -8,6 +8,7 @@
|
||||||
"*.bak": "c",
|
"*.bak": "c",
|
||||||
"*.tcc": "c",
|
"*.tcc": "c",
|
||||||
"errno.h": "c",
|
"errno.h": "c",
|
||||||
"string.h": "c"
|
"string.h": "c",
|
||||||
|
"system_error": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
1
jobs.c
1
jobs.c
|
@ -110,7 +110,6 @@ void liberer(list *l_ptr)
|
||||||
free(cursor2free);
|
free(cursor2free);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(*l_ptr);
|
|
||||||
*l_ptr = NULL;
|
*l_ptr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18
minishell.c
18
minishell.c
|
@ -33,13 +33,15 @@ int file_in, file_out;
|
||||||
int pipes[256][2];
|
int pipes[256][2];
|
||||||
int sous_fils[256];
|
int sous_fils[256];
|
||||||
|
|
||||||
|
struct sigaction action;
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
setvbuf(stdout, NULL, _IONBF, 0); // pratique pour test.sh, optionnel sinon (normalement)
|
||||||
initialiser(&jobs);
|
initialiser(&jobs);
|
||||||
getcwd(initcd, sizeof(initcd));
|
getcwd(initcd, sizeof(initcd));
|
||||||
|
|
||||||
// gestion des signaux
|
// gestion des signaux
|
||||||
struct sigaction action;
|
|
||||||
sigemptyset(&action.sa_mask);
|
sigemptyset(&action.sa_mask);
|
||||||
action.sa_flags = SA_SIGINFO | SA_RESTART;
|
action.sa_flags = SA_SIGINFO | SA_RESTART;
|
||||||
action.sa_handler = handler_sigchld;
|
action.sa_handler = handler_sigchld;
|
||||||
|
@ -178,14 +180,10 @@ int main(int argc, char *argv[])
|
||||||
for (int i = 0; i <= nb_pipe; i++)
|
for (int i = 0; i <= nb_pipe; i++)
|
||||||
{ // on attend chaque sous-fils
|
{ // on attend chaque sous-fils
|
||||||
if (waitpid(sous_fils[i], &wait_code, 0) == -1)
|
if (waitpid(sous_fils[i], &wait_code, 0) == -1)
|
||||||
{ // wait failed ?
|
if (wait_code)
|
||||||
fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", wait_code, errno, strerror(errno));
|
{ // execvp failed ?
|
||||||
exit(errno);
|
fprintf(stderr, "ERROR: child n°%d failed, (%d) %s\n", i, wait_code, strerror(wait_code));
|
||||||
} // TODO: factoriser dans une fonction, cf dessous ?
|
}
|
||||||
if (wait_code)
|
|
||||||
{ // execvp failed ?
|
|
||||||
fprintf(stderr, "ERROR: child failed, (%d) %s\n", wait_code, strerror(wait_code));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
exit(0); // on termine le fils
|
exit(0); // on termine le fils
|
||||||
}
|
}
|
||||||
|
@ -207,7 +205,7 @@ int main(int argc, char *argv[])
|
||||||
{ // foreground
|
{ // foreground
|
||||||
if (waitpid(pid_fils, &wait_code, 0) == -1)
|
if (waitpid(pid_fils, &wait_code, 0) == -1)
|
||||||
{ // wait failed ?
|
{ // wait failed ?
|
||||||
fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", wait_code, errno, strerror(errno));
|
fprintf(stderr, "ERROR: waiting for %d failed, (%d) %s\n", pid_fils, errno, strerror(errno));
|
||||||
exit(errno);
|
exit(errno);
|
||||||
}
|
}
|
||||||
if (wait_code)
|
if (wait_code)
|
||||||
|
|
116
test.sh
116
test.sh
|
@ -1,2 +1,114 @@
|
||||||
sleep 4
|
green=`tput setaf 2`
|
||||||
printf "\n\n --- bonjour --- \n\n"
|
reset=`tput sgr0`
|
||||||
|
|
||||||
|
extralongpipe=`printf '| sort | uniq | rev %.0s' {1..20}`
|
||||||
|
|
||||||
|
rm .testms > /dev/null
|
||||||
|
touch .testms
|
||||||
|
clear
|
||||||
|
tail -f .testms &
|
||||||
|
tailpid=$!
|
||||||
|
|
||||||
|
tmux kill-session -t testms > /dev/null 2>&1
|
||||||
|
tmux new-session -d -s testms './minishell > .testms'
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}echo bonjour, je suis un message vert de debug${reset}"
|
||||||
|
tmux send-keys -t testms -l "echo bonjour, je suis un message vert de debug"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}ls${reset}"
|
||||||
|
tmux send-keys -t testms -l "ls"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}ls -l${reset}"
|
||||||
|
tmux send-keys -t testms -l "ls -lah"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}ls -lah | grep mini${reset}"
|
||||||
|
tmux send-keys -t testms -l "ls -lah | grep mini"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}ls -lah | grep mini | wc${reset}"
|
||||||
|
tmux send-keys -t testms -l "ls -lah | grep mini | wc"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}ls -lah | sort | rev | sort | ... ${reset}"
|
||||||
|
tmux send-keys -t testms -l "ls -lah $extralongpipe"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}^C${reset}"
|
||||||
|
tmux send-keys -t testms C-c
|
||||||
|
echo "${green}^C${reset}"
|
||||||
|
tmux send-keys -t testms C-c
|
||||||
|
echo "${green}^C${reset}"
|
||||||
|
tmux send-keys -t testms C-c
|
||||||
|
|
||||||
|
for i in {5..15}
|
||||||
|
do
|
||||||
|
echo "${green}sleep $i &${reset}"
|
||||||
|
tmux send-keys -t testms -l "sleep $i &"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}stop 8${reset}"
|
||||||
|
tmux send-keys -t testms -l "stop 8"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
echo "${green}fg 1${reset}"
|
||||||
|
tmux send-keys -t testms -l "fg 1"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}^Z${reset}"
|
||||||
|
tmux send-keys -t testms C-z
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}bg 1${reset}"
|
||||||
|
tmux send-keys -t testms -l "bg 1"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}jobs${reset}"
|
||||||
|
tmux send-keys -t testms -l "jobs"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}pwd${reset}"
|
||||||
|
tmux send-keys -t testms -l "pwd"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}cd ..${reset}"
|
||||||
|
tmux send-keys -t testms -l "cd .."
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
sleep 0.5
|
||||||
|
|
||||||
|
echo "${green}pwd${reset}"
|
||||||
|
tmux send-keys -t testms -l "pwd"
|
||||||
|
tmux send-keys -t testms Enter
|
||||||
|
|
||||||
|
sleep 12
|
||||||
|
|
||||||
|
tmux send-keys -t testms C-d
|
||||||
|
kill $tailpid
|
||||||
|
|
36
test1
Normal file
36
test1
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
à zipper
|
||||||
|
jobs.c
|
||||||
|
jobs.h
|
||||||
|
latex
|
||||||
|
Makefile
|
||||||
|
minishell
|
||||||
|
minishell.c
|
||||||
|
readcmd.c
|
||||||
|
readcmd.h
|
||||||
|
README.md
|
||||||
|
sujet.pdf
|
||||||
|
test1
|
||||||
|
test.sh
|
||||||
|
utils.c
|
||||||
|
utils.h
|
||||||
|
message de test
|
||||||
|
total 256
|
||||||
|
drwxr-xr-x 2 laurent laurent 4096 May 23 16:32 à zipper
|
||||||
|
-rw-r--r-- 1 laurent laurent 2676 May 23 16:25 jobs.c
|
||||||
|
-rw-r--r-- 1 laurent laurent 403 May 23 16:22 jobs.h
|
||||||
|
drwxr-xr-x 4 laurent laurent 4096 Apr 25 20:56 latex
|
||||||
|
-rw-r--r-- 1 laurent laurent 205 May 10 15:49 Makefile
|
||||||
|
-rwxr-xr-x 1 laurent laurent 27264 May 23 16:20 minishell
|
||||||
|
-rw-r--r-- 1 laurent laurent 7450 May 23 16:23 minishell.c
|
||||||
|
-rwxr-xr-x 1 laurent laurent 5115 Apr 21 14:03 readcmd.c
|
||||||
|
-rwxr-xr-x 1 laurent laurent 2163 May 23 16:24 readcmd.h
|
||||||
|
-rwxr-xr-x 1 laurent laurent 2063 Apr 13 10:42 README.md
|
||||||
|
-rw-r--r-- 1 laurent laurent 166500 Apr 25 20:25 sujet.pdf
|
||||||
|
-rw-r--r-- 1 laurent laurent 147 May 23 16:38 test1
|
||||||
|
-rw-r--r-- 1 laurent laurent 113 May 23 16:38 test.sh
|
||||||
|
-rw-r--r-- 1 laurent laurent 4583 May 23 16:24 utils.c
|
||||||
|
-rw-r--r-- 1 laurent laurent 165 May 23 16:22 utils.h
|
||||||
|
1 9 59
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> minishell
|
||||||
|
minishell.c
|
||||||
|
/home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>> /home/laurent/Documents/Cours/ENSEEIHT/S6 - Systèmes d'Exploitation Centralisés/projet >>>
|
4
utils.c
4
utils.c
|
@ -20,6 +20,7 @@ extern list jobs;
|
||||||
extern struct cmdline *cmd;
|
extern struct cmdline *cmd;
|
||||||
extern jmp_buf goto_prompt;
|
extern jmp_buf goto_prompt;
|
||||||
extern char initcd[];
|
extern char initcd[];
|
||||||
|
extern struct sigaction action;
|
||||||
|
|
||||||
int builtin()
|
int builtin()
|
||||||
{
|
{
|
||||||
|
@ -92,6 +93,7 @@ int builtin()
|
||||||
pid_fils = job->pid;
|
pid_fils = job->pid;
|
||||||
}
|
}
|
||||||
kill(pid_fils, SIGCONT);
|
kill(pid_fils, SIGCONT);
|
||||||
|
printf("[%d] %d running: %s\n", job->id, job->pid, job->cmd);
|
||||||
pause();
|
pause();
|
||||||
waitpid(pid_fils, NULL, 0);
|
waitpid(pid_fils, NULL, 0);
|
||||||
return 2;
|
return 2;
|
||||||
|
@ -187,7 +189,7 @@ void handler_sigtstp(int sig_num)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
if (!prompting)
|
if (!prompting)
|
||||||
{
|
{
|
||||||
ajouter(&jobs, pid_fils, *(cmd->seq));
|
//ajouter(&jobs, pid_fils, *(cmd->seq));
|
||||||
kill(pid_fils, SIGSTOP);
|
kill(pid_fils, SIGSTOP);
|
||||||
pause();
|
pause();
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -1,9 +1,9 @@
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LDFLAGS = -Wall
|
LDFLAGS = -Wall -g
|
||||||
|
|
||||||
all: minishell Q1 Q3 Q4 Q5 Q6 Q7
|
all: minishell Q1 Q3 Q4 Q5 Q6 Q7
|
||||||
|
|
||||||
minishell: jobs.c readcmd.c minishell.c
|
minishell: utils.c jobs.c readcmd.c minishell.c
|
||||||
$(CC) $(LDFLAGS) $^ -o $@
|
$(CC) $(LDFLAGS) $^ -o $@
|
||||||
|
|
||||||
Q1: jobs.c readcmd.c Q1.c
|
Q1: jobs.c readcmd.c Q1.c
|
||||||
|
@ -24,11 +24,11 @@ Q6: jobs.c readcmd.c Q6.c
|
||||||
Q7: jobs.c readcmd.c Q7.c
|
Q7: jobs.c readcmd.c Q7.c
|
||||||
$(CC) $(LDFLAGS) $^ -o $@
|
$(CC) $(LDFLAGS) $^ -o $@
|
||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm minishell readcmd jobs Q1 Q3 Q4 Q5 Q6 Q7
|
rm minishell readcmd jobs utils Q1 Q3 Q4 Q5 Q6 Q7
|
||||||
|
|
||||||
.PHONY: clean all
|
.PHONY: clean all
|
||||||
|
|
||||||
readcmd.o: readcmd.h
|
readcmd.o: readcmd.h
|
||||||
jobs.o: jobs.h
|
jobs.o: jobs.h
|
||||||
|
utils.o: utils.h
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
Introduction
|
|
||||||
------------
|
|
||||||
Le code fourni a pour but de vous décharger du travail d'analyse d'une ligne de commande,
|
|
||||||
avant son interprétation par le shell. Il propose une fonction `readcmd()` qui fournit
|
|
||||||
le résultat de cette analyse.
|
|
||||||
|
|
||||||
Le source est fourni non pas à titre d'exemple (il n'est pas d'une clarté éblouissante),
|
|
||||||
mais à titre de documentation (et de spécification :)) ; il n'est ni
|
|
||||||
nécessaire, ni conseillé de le modifier pour réaliser le travail demandé : l'analyse
|
|
||||||
réalisée est suffisante pour la syntaxe des commandes que votre shell doit interpréter.
|
|
||||||
|
|
||||||
Ce code est a priori tout à fait fiable, mais n'hésitez cependant pas à nous signaler
|
|
||||||
ce qui vous apparaîtrait comme des anomalies, ou des lacunes dans la documentation.
|
|
||||||
|
|
||||||
La structure `cmdline`
|
|
||||||
----------------------
|
|
||||||
L'appel à readcmd() retourne une structure cmdline, qui contient le résultat de l'analyse
|
|
||||||
de la ligne de commande pour le shell.
|
|
||||||
Cette structure contient notamment :
|
|
||||||
|
|
||||||
- l'indication du fait que la commande doit être lancée en tâche de fond ou non
|
|
||||||
- les redirections éventuelles
|
|
||||||
- la décomposition de la ligne de commande en commandes élémentaires, et la décomposition
|
|
||||||
de chaque commande en mots. Le champ `seq` référence le résultat de cette décomposition,
|
|
||||||
qui est vu comme un tableau à deux dimensions [commandes élémentaires, mots de la commande]
|
|
||||||
|
|
||||||
**Pour plus de détails, voir le fichier d'en-tête `readcmd.h`.**
|
|
||||||
|
|
||||||
**Exemples :**
|
|
||||||
|
|
||||||
- "ls -l" : seq[0][0] = "ls", seq[0][1] = "-l", seq[0][2] = NULL, seq[1] = NULL, backgrounded = NULL, in = NULL, out = NULL
|
|
||||||
- "ls -l > toto" : seq[0][0] = "ls", seq[0][1] = "-l", seq[0][2] = NULL,
|
|
||||||
seq[1] = NULL, backgrounded = NULL, in = NULL, out => "toto"
|
|
||||||
- "ls | grep toto | wc -l" : seq[0][0] = "ls", seq[0][1] = NULL,
|
|
||||||
seq[1][0] = "grep", seq[1][1] = "toto", seq[1][2] = NULL,
|
|
||||||
seq[2][0] = "wc", seq[0][1] = "-l", seq[0][2] = NULL,
|
|
||||||
seq[3] = NULL, backgrounded = NULL, in = NULL, out = NULL
|
|
||||||
- "sleep 100 &" : seq[0][0] = "sleep", seq[0][1] = "20", backgrounded != NULL, in = NULL, out = NULL
|
|
Loading…
Reference in a new issue