From 685d32641209b2671b154f52046d6bfd63bd9531 Mon Sep 17 00:00:00 2001 From: Niklas Halle Date: Mon, 8 Jun 2020 13:24:09 +0200 Subject: put und get gehen, jetzt sogar wirklich, glaube ich --- 03_exercise/cli/client | Bin 30912 -> 31152 bytes 03_exercise/cli/client.c | 41 +++++++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 14 deletions(-) (limited to '03_exercise/cli') diff --git a/03_exercise/cli/client b/03_exercise/cli/client index ecaa0d8..56618d6 100755 Binary files a/03_exercise/cli/client and b/03_exercise/cli/client differ diff --git a/03_exercise/cli/client.c b/03_exercise/cli/client.c index f3a4479..9ae6c0a 100644 --- a/03_exercise/cli/client.c +++ b/03_exercise/cli/client.c @@ -19,6 +19,8 @@ #define BREAK 1 #define CONTINUE 2 +char *get_current_dir_name(void); + int server_sock; pid_t pid; @@ -56,39 +58,50 @@ int main() { pid = fork(); - if (pid != 0) { + if (pid == 0) { read_stdin(); } else { read_server_sock(); } close(server_sock); + kill(pid, SIGKILL); + return 0; } void receive_file(int recv_sock, char *path, int size) { - char buffer[512]; + char buffer[BUF_SIZE]; int file_fd; int received; if ((file_fd = open(path, (O_WRONLY | O_CREAT | O_TRUNC), 0644)) == -1) { perror("Open"); } + if (size == 0) { + // just touch + close(file_fd); + return; + } + received = 0; /* Read all data */ while (received < size) { int nread; - if ((nread = read(recv_sock, buffer + received, size - received)) < 0) { - perror("Read"); - //pthread_exit(NULL); - exit(1); + if ((nread = read(recv_sock, buffer, BUF_SIZE)) > 0) { + if (write_all(file_fd, buffer, nread) != nread) { + break; + } + received += nread; } - - received += nread; } - if (write_all(file_fd, buffer, strlen(buffer) + 1) == strlen(buffer) + 1) { - printf("successfully got remote file \"%s\"\n", path); + if (received == size) { + printf("successfully got remote file \"%s/%s\"", get_current_dir_name(), path); + printf("\n"); + } else { + printf("error getting remote file \"%s/%s\"", get_current_dir_name(), path); + printf("\n"); } close(file_fd); @@ -102,7 +115,7 @@ bool check_get(char *buffer) { cmd[3] = 0; if (strcmp(cmd, "< 0) { - printf("Sent %i bytes\n", write_all(server_sock, buffer, strlen(buffer) + 1)); + size_t count; + while ((count = read(file_fd, buffer, sizeof(buffer))) > 0) { + printf("Sent %i bytes\n", write_all(server_sock, buffer, count)); } if (errno) -- cgit v1.2.3-54-g00ecf