diff --git a/drivers/stdin/stdin.c b/drivers/stdin/stdin.c index 6b848082..7904f62a 100644 --- a/drivers/stdin/stdin.c +++ b/drivers/stdin/stdin.c @@ -28,7 +28,9 @@ static ssize_t stdin_read(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset) { - kprintf("Keine Eingabe implementiert"); + while(size) { + size = kputs((char*)buffer); + } return size; } diff --git a/drivers/stdout/stdout.c b/drivers/stdout/stdout.c index 268a4009..29fbb035 100644 --- a/drivers/stdout/stdout.c +++ b/drivers/stdout/stdout.c @@ -33,7 +33,7 @@ static ssize_t stdout_read(vfs_node_t* node, uint8_t* buffer, size_t size, off_t static ssize_t stdout_write(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset) { - kprintf("%s", buffer); + size = kprintf("%s\0", buffer); return size; } diff --git a/kernel/syscall.c b/kernel/syscall.c index 809ea4ec..ca0651f5 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -32,7 +32,7 @@ static int sys_read(int fd, const char *buf, size_t len) (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset); per_core(current_task)->fildes_table[fd].offset += readbytes; - /*kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf);*/ + //kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); /* Beware: still reading above file limit! */ return readbytes; } @@ -40,12 +40,8 @@ static int sys_read(int fd, const char *buf, size_t len) static int sys_write(int fd, const char *buf, size_t len) { unsigned int wrotebytes; - /* per_core(current_task)->fildes_table[fd].node->write = 1; */ - wrotebytes = write_fs( - per_core(current_task)->fildes_table[fd].node, - (uint8_t*)buf, len, 0); - /* per_core(current_task)->fildes_table[fd].offset); */ - /* kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); */ + wrotebytes = write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset); + //kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, wrotebytes, buf); per_core(current_task)->fildes_table[fd].offset += wrotebytes; return wrotebytes; @@ -54,7 +50,7 @@ static int sys_write(int fd, const char *buf, size_t len) static int sys_open(const char* file, int flags, int mode) { int fd; - for (fd = 0; fd < MAX_FILDES; fd++) { + for (fd = 3; fd < MAX_FILDES; fd++) { if (per_core(current_task)->fildes_table[fd].node == NULL) { per_core(current_task)->fildes_table[fd].node = findnode_fs((char*) file); return fd; @@ -118,28 +114,26 @@ int syscall_handler(uint32_t sys_nr, ...) int fd = va_arg(vl, int); const char* buf = va_arg(vl, const char*); size_t len = va_arg(vl, size_t); - kprintf("%s", buf); - //ret = sys_read(fd, buf, len); + ret = sys_read(fd, buf, len); break; } case __NR_write: { int fd = va_arg(vl, int); const char* buf = va_arg(vl, const char*); size_t len = va_arg(vl, size_t); - kprintf("%s", buf); - //ret = sys_write(fd, buf, len); + ret = sys_write(fd, buf, len); break; } case __NR_open: { const char* file = va_arg(vl, const char*); int flags = va_arg(vl, int); int mode = va_arg(vl, int); - //ret = sys_open(file, flags, mode); + ret = sys_open(file, flags, mode); break; } case __NR_close: { int fd = va_arg(vl, int); - //ret = sys_close(fd); + ret = sys_close(fd); break; } case __NR_sbrk: { diff --git a/kernel/tasks.c b/kernel/tasks.c index e9341558..5414c1b9 100644 --- a/kernel/tasks.c +++ b/kernel/tasks.c @@ -184,6 +184,10 @@ static int create_task(tid_t* id, entry_point_t ep, void* arg) mailbox_wait_msg_init(&task_table[i].inbox); memset(task_table[i].outbox, 0x00, sizeof(mailbox_wait_msg_t*)*MAX_TASKS); task_table[i].outbox[per_core(current_task)->id] = &per_core(current_task)->inbox; + task_table[i].fildes_table[0].node = findnode_fs("/dev/stdin"); + task_table[i].fildes_table[1].node = findnode_fs("/dev/stdout"); + task_table[i].fildes_table[2].node = findnode_fs("/dev/stderr"); + if (id) *id = i; @@ -533,7 +537,7 @@ int create_user_task(tid_t* id, const char* fname, char** argv) } } - if (argc < 0) + if (argc <= 0) return -EINVAL; if (buffer_size >= MAX_ARGS) return -EINVAL; diff --git a/kernel/tests.c b/kernel/tests.c index c2d9a47b..71b91e20 100644 --- a/kernel/tests.c +++ b/kernel/tests.c @@ -102,7 +102,7 @@ static int STDCALL join_test(void* arg) int test_init(void) { - char* argv[] = {"/bin/tests", NULL}; + char* argv[] = {"/bin/hello", NULL}; sem_init(&producing, 1); sem_init(&consuming, 0); diff --git a/newlib/examples/hello.c b/newlib/examples/hello.c index 32382d08..861cb6f6 100644 --- a/newlib/examples/hello.c +++ b/newlib/examples/hello.c @@ -28,14 +28,27 @@ extern int errno; int main(int argc, char** argv) { //int i; - //char* str = (char *)malloc(40 * sizeof(char)); - //FILE* testfile; - printf("hallo"); - //testfile = fopen("/bin/test", "w+r"); - //setbuf(testfile, NULL); - //fread(str, 1, 10, testfile); - //fwrite("wtest1\n", 1, 7, testfile); - //fread(str, 1, 10, testfile); + char* str = (char *)malloc(20 * sizeof(char)); + char* str2 = (char *)malloc(20 * sizeof(char)); + + FILE* testfile; + testfile = fopen("/bin/test", "w+r"); + setbuf(testfile, NULL); + fflush(NULL); + fread(str2, 1, 10, testfile); + fflush(NULL); + printf("Datei gelesen (/bin/test):%s\n", str2); + fflush(NULL); + + setbuf(testfile, NULL); + fflush(NULL); + fwrite("wtest1", 1, 7, testfile); + setbuf(testfile, NULL); + + fread(str, 1, 10, testfile); + fflush(NULL); + + //printf("Aus Datei gelesen (/bin/test):%s\n", str); return errno; } diff --git a/newlib/examples/test b/newlib/examples/test index 51d96d29..3d6ab3f2 100644 --- a/newlib/examples/test +++ b/newlib/examples/test @@ -1 +1,2 @@ HalloXA!! +