diff options
Diffstat (limited to 'src/examples/line_echo.c')
| -rw-r--r-- | src/examples/line_echo.c | 60 |
1 files changed, 60 insertions, 0 deletions
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 <stdio.h>
+#include <syscall.h>
+
+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);
+}
|
