X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/ea77b9c3fc7fb9bf9d7f9604fc187c8049212a2a..f13e160f6aa2f74895ecf1f65099265643836210:/lunaix-os/kernel/demos/simple_sh.c?ds=sidebyside diff --git a/lunaix-os/kernel/demos/simple_sh.c b/lunaix-os/kernel/demos/simple_sh.c index 3a1e1bb..26aa3be 100644 --- a/lunaix-os/kernel/demos/simple_sh.c +++ b/lunaix-os/kernel/demos/simple_sh.c @@ -1,11 +1,13 @@ -#include -#include #include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include + #include #include @@ -99,9 +101,9 @@ do_ls(const char* path) if (fd < 0) { sh_printerr(); } else { - struct dirent ent = { .d_offset = 0 }; + struct lx_dirent ent = { .d_offset = 0 }; int status; - while ((status = readdir(fd, &ent)) == 1) { + while ((status = sys_readdir(fd, &ent)) == 1) { if (ent.d_type == DT_DIR) { printf(" \033[3m%s\033[39;49m\n", ent.d_name); } else { @@ -116,13 +118,32 @@ do_ls(const char* path) } } +void +do_mcat(const char* file) +{ + int fd = open(file, 0); + if (fd < 0) { + sh_printerr(); + } else { + void* p = mmap(NULL, 2048, 0, 0, fd, 0); + if ((int)p < 0) { + sh_printerr(); + } else { + printf("%s\n", p); + } + munmap(p, 1); + close(fd); + printf("\n"); + } +} + void sh_loop() { char buf[512]; char *cmd, *argpart; pid_t p; - signal(_SIGINT, sigint_handle); + signal(SIGINT, sigint_handle); // set our shell as foreground process // (unistd.h:tcsetpgrp is essentially a wrapper of this) @@ -161,6 +182,11 @@ sh_loop() do_cat(argpart); _exit(0); } + } else if (streq(cmd, "mcat")) { + if (!(p = fork())) { + do_mcat(argpart); + _exit(0); + } } else { printf("unknow command\n"); goto cont;