123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #include "basic-lib.h"
- static inline char tc(int n) {
- return '0' + n;
- }
- void print_int(int n) {
- char buf[12];
- int len = 0;
- while (n) {
- int dig = n % 10;
- buf[len++] = tc(dig);
- n /= 10;
- }
- write(0, buf, len);
- }
- size_t strlen(const char* str)
- {
- const char* p = str;
- while (*p)
- ++p;
- return p - str;
- }
- static inline void print(const char* str)
- {
- write(0, str, strlen(str));
- }
- int main(int argc, char** argv)
- {
- for (int i = 0; i < argc; ++i)
- write(0, argv[i], 0);
- print("Hello World from user space init\n");
- int ret = fork();
- if (ret == 0) {
- print("child\n");
- exit(255);
- } else {
- print("parent\n");
- }
- char buf[128] = {};
- const char* path = "/dev";
- print("content in ");
- print(path);
- print(":\n");
- int dir = open(path, O_RDONLY | O_DIRECTORY);
- if (dir >= 0) {
- for (;;) {
- int n = getdents(dir, (struct user_dirent*)buf, 128);
- if (n < 0)
- print("error\n");
- if (n <= 0)
- break;
- int bpos = 0;
- for (; bpos < n;) {
- struct user_dirent* dirp = (struct user_dirent*)(buf + bpos);
- print("ino: ");
- print_int(dirp->d_ino);
- print(", filename: \"");
- print(dirp->d_name);
- print("\", filetype: ");
- switch (buf[bpos + dirp->d_reclen - 1]) {
- case DT_REG:
- print("regular file");
- break;
- case DT_DIR:
- print("directory");
- break;
- case DT_BLK:
- print("block device");
- break;
- default:
- print("unknown");
- break;
- }
- print("\n");
- bpos += dirp->d_reclen;
- }
- }
- }
- for (;;) {
- int n = read(0, buf, 128);
- if (n)
- write(0, buf, n);
- else
- print("fuck!\n");
-
- if (buf[0] == 'e' && buf[1] == 'x' && buf[2] == 'i' && buf[3] == 't') {
- print("\nexited echo mode!\n");
- break;
- }
- }
- for (;;) {
- int ret;
- pid_t pid = wait(&ret);
- print("ret: ");
- print_int(ret);
- print(", pid: ");
- print_int(pid);
- print("\n");
- }
- return 0;
- }
|