From af2459a04247a25a974c3101c669791abc2c0a0f Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 13 May 2023 21:13:20 -0300 Subject: [PATCH] scheduler: init stdin, stdout and stderr --- kernel-src/sys/scheduler.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/kernel-src/sys/scheduler.c b/kernel-src/sys/scheduler.c index 63b61bee..250fae06 100644 --- a/kernel-src/sys/scheduler.c +++ b/kernel-src/sys/scheduler.c @@ -382,13 +382,33 @@ void sched_runinit() { __assert(interpinterp == NULL); } - vnode_t *stdinvnode; - __assert(vfs_open(vfsroot, "/dev/console", V_FFLAGS_READ, &stdinvnode) == 0); + vnode_t *stdinnode; + __assert(vfs_open(vfsroot, "/dev/console", V_FFLAGS_READ, &stdinnode) == 0); vnode_t *stdoutnode; __assert(vfs_open(vfsroot, "/dev/console", V_FFLAGS_WRITE, &stdoutnode) == 0); vnode_t *stderrnode; __assert(vfs_open(vfsroot, "/dev/console", V_FFLAGS_WRITE, &stderrnode) == 0); + file_t *stdin = fd_allocate(); + file_t *stdout = fd_allocate(); + file_t *stderr = fd_allocate(); + + stdin->vnode = stdinnode; + stdout->vnode = stdoutnode; + stderr->vnode = stderrnode; + + stdin->flags = FILE_READ; + stdout->flags = stderr->flags = FILE_WRITE; + stdin->offset = stdout->offset = stderr->offset = 0; + stdin->mode = stdout->mode = stderr-> mode = 0644; + + proc->fd[0].file = stdin; + proc->fd[0].flags = 0; + proc->fd[1].file = stdout; + proc->fd[1].flags = 0; + proc->fd[2].file = stderr; + proc->fd[2].flags = 0; + proc->cwd = vfsroot; VOP_HOLD(vfsroot); proc->root = vfsroot;