void umain(int argc, char **argv) { int i, usefprint = 0; struct Stat st; struct Argstate args; argstart(&argc, argv, &args); while ((i = argnext(&args)) >= 0) if (i == '1') usefprint = 1; else usage(); for (i = 0; i < 32; i++) if (fstat(i, &st) >= 0) { if (usefprint) fprintf(1, "fd %d: name %s isdir %d size %d dev %s\n", i, st.st_name, st.st_ftype == FTYPE_DIR, st.st_size, st.st_dev->dev_name); else cprintf("fd %d: name %s isdir %d size %d dev %s\n", i, st.st_name, st.st_ftype == FTYPE_DIR, st.st_size, st.st_dev->dev_name); } }
void umain(int argc, char **argv) { int i; struct Argstate args; argstart(&argc, argv, &args); while ((i = argnext(&args)) >= 0) switch (i) { case 'd': case 'F': case 'l': flag[i]++; break; default: usage(); } if (argc == 1) ls("/", ""); else { for (i = 1; i < argc; i++) ls(argv[i], argv[i]); } }
void umain(int argc, char **argv) { int r, interactive, echocmds; struct Argstate args; interactive = '?'; echocmds = 0; argstart(&argc, argv, &args); while ((r = argnext(&args)) >= 0) switch (r) { case 'd': debug++; break; case 'i': interactive = 1; break; case 'x': echocmds = 1; break; default: usage(); } if (argc > 2) usage(); if (argc == 2) { close(0); if ((r = open(argv[1], O_RDONLY)) < 0) panic("open %s: %e", argv[1], r); assert(r == 0); } if (interactive == '?') interactive = iscons(0); while (1) { char *buf; buf = readline(interactive ? "$ " : NULL); if (buf == NULL) { if (debug) cprintf("EXITING\n"); exit(); // end of file } if (debug) cprintf("LINE: %s\n", buf); if (buf[0] == '#') continue; if (echocmds) printf("# %s\n", buf); if (debug) cprintf("BEFORE FORK\n"); if ((r = fork()) < 0) panic("fork: %e", r); if (debug) cprintf("FORK: %d\n", r); if (r == 0) { runcmd(buf); exit(); } else wait(r); } }