diff options
author | Niklas Halle <niklas@niklashalle.net> | 2020-06-08 17:30:18 +0200 |
---|---|---|
committer | Niklas Halle <niklas@niklashalle.net> | 2020-06-08 17:30:18 +0200 |
commit | 7ab92ebb3424e904ee78862683eb65fb60d878f6 (patch) | |
tree | 0725f1324d605ab4fd0ce4fc85b0d0b3fdd72176 /03_exercise/srv/shell.c | |
parent | 735c44b9b9b8c3bb476e9d5faee60e27c6907b99 (diff) | |
download | betriebssysteme-7ab92ebb3424e904ee78862683eb65fb60d878f6.tar.gz betriebssysteme-7ab92ebb3424e904ee78862683eb65fb60d878f6.zip |
multiple clients
Diffstat (limited to '03_exercise/srv/shell.c')
-rw-r--r-- | 03_exercise/srv/shell.c | 27 |
1 files changed, 5 insertions, 22 deletions
diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c index 686b169..c7155c6 100644 --- a/03_exercise/srv/shell.c +++ b/03_exercise/srv/shell.c @@ -13,26 +13,8 @@ #include "array.h" #include "process.h" -#include "prompt_utils.h" #include "builtins.h" -/* - * READ ME - * sorry für den unaufgeräumten Code hier :/ - * - * What works: - * - remote shell, weitesgehend die funktionalität der vorhergehenden aufgabe (damit auch pipes und background, - * auch wenn wir das nicht ausführlich getestet haben) - * - get und put für dateien - * What doesn't work: - * - mehrere clients an einem server - * Known bugs: - * - exit beendet nicht nur die client-server connection und setzt den server wieder in einen wartenden zustand, - * sondern terminiert ebenfalls den server - * - das erkennen, wann eine neue prompt geprintet werden muss ist aktuell sehr hacky client seitig implementiert, - * scheitert teilweise - die eingabe geht trzd ganz normal, es wird nur keine prompt angezeigt - */ - char *get_current_dir_name(void); #define BUF_SIZE 2048 @@ -202,8 +184,8 @@ bool check_put(char *buffer, int sock) { } int shell(int in_fd) { - setvbuf(stderr, NULL, _IONBF, 0); - setvbuf(stdout, NULL, _IONBF, 0); + int stdoutCopy = dup(STDOUT_FILENO); + int stderrCopy = dup(STDERR_FILENO); dup2(in_fd, STDOUT_FILENO); dup2(in_fd, STDERR_FILENO); @@ -305,8 +287,9 @@ int shell(int in_fd) { free_processes(&processes); } - printf("Disconnecting..."); - printf("\n"); + // reset output + dup2(STDOUT_FILENO, stdoutCopy); + dup2(STDERR_FILENO, stderrCopy); free((void *) original_wd); |