summaryrefslogtreecommitdiffstats
path: root/03_exercise/srv/shell.c
diff options
context:
space:
mode:
Diffstat (limited to '03_exercise/srv/shell.c')
-rw-r--r--03_exercise/srv/shell.c27
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);