From e7bc50ca8ffcaa6ed68ebd2315f78b0f5a7d10ad Mon Sep 17 00:00:00 2001 From: klaar36 Date: Fri, 20 Mar 2015 17:30:24 +0100 Subject: Initial Pintos --- src/examples/line_echo.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/examples/line_echo.c (limited to 'src/examples/line_echo.c') diff --git a/src/examples/line_echo.c b/src/examples/line_echo.c new file mode 100644 index 0000000..5aa5ee9 --- /dev/null +++ b/src/examples/line_echo.c @@ -0,0 +1,60 @@ +/* klaar@ida + + pintos --fs-disk=2 -v -k -p ../examples/line_echo -a line_echo -- -f -q run line_echo + + This program will echo every input line to output. + */ + +#include +#include + +int mystrlen(char *start); +int getline(char *buf, int size); + +int main(void) +{ + char buf[10]; + int length; + char endl = '\n'; + + for ( ; ; ) + { + length = getline(buf, 10); + + if (length != mystrlen(buf)) + exit(111); + + if (length < 1) + break; + + write(STDOUT_FILENO, buf, length); + write(STDOUT_FILENO, &endl, 1); + } + + return 0; +} + +int getline(char *buf, int size) +{ + int i; + + for (i = 0; i < size-1; ++i) + { + if (read(STDIN_FILENO, &buf[i], 1) != 1) + break; + if (buf[i] == '\n') + break; + } + buf[i] = '\0'; + return i; +} + +int mystrlen(char *start) +{ + char* end = start; + + while(*end != '\0') + ++end; + + return (end - start); +} -- cgit v1.2.1