diff --git a/kernel/tasks.c b/kernel/tasks.c index 88127af2..fae26a13 100644 --- a/kernel/tasks.c +++ b/kernel/tasks.c @@ -214,7 +214,7 @@ create_task_out: int sys_fork(void) { int ret = -ENOMEM; - unsigned int i; + unsigned int i, fd_i; task_t* parent_task = per_core(current_task); vma_t** child; vma_t* parent; @@ -256,7 +256,11 @@ int sys_fork(void) tmp = *child; child = &((*child)->next); } - + + // copy filedescriptors + for (fd_i = 0; fd_i < NR_OPEN; fd_i++) { + task_table[i].fildes_table[fd_i].node = per_core(current_task)->fildes_table[fd_i].node; + } 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");