From fb3b792ba17afb41e9662fd3b60492f0c12fa0f0 Mon Sep 17 00:00:00 2001 From: Niklas Halle Date: Mon, 8 Jun 2020 13:38:05 +0200 Subject: first kinda ready stand, with comment in shell.c explaining a bit --- 03_exercise/srv/shell.c | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c index cd053b6..b93030f 100644 --- a/03_exercise/srv/shell.c +++ b/03_exercise/srv/shell.c @@ -12,6 +12,23 @@ #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 @@ -24,6 +41,7 @@ int write_all(int target_sock, char *buffer, size_t size) { while (sent < size) { if ((nwrite = write(target_sock, buffer + sent, size - sent)) < 0) { perror("Write"); + printf("\n"); return -1; } @@ -38,7 +56,10 @@ void receive_file(int recv_sock, char *path, int size) { int file_fd; int received; - if ((file_fd = open(path, (O_WRONLY | O_CREAT | O_TRUNC), 0644)) == -1) { perror("Open"); } + if ((file_fd = open(path, (O_WRONLY | O_CREAT | O_TRUNC), 0644)) == -1) { + perror("Open"); + printf("\n"); + } if (size == 0) { // just touch @@ -78,6 +99,7 @@ void send_file(int client_fd, char *path) { if ((tmp_fd = open(path, O_RDONLY)) == -1) { perror("Open"); + printf("\n"); return; } FILE *file = fdopen(tmp_fd, "r"); @@ -88,10 +110,11 @@ void send_file(int client_fd, char *path) { close(tmp_fd); if ((file_fd = open(path, O_RDONLY)) == -1) { perror("Open"); + printf("\n"); return; } - int length = snprintf(NULL, 0, "%ld", sz); + int length = snprintf(NULL, 0, "%ld", sz); sprintf(buffer, "<