From 1f544842ceb5af73b1f2b13222d72dd4ad7cd08a Mon Sep 17 00:00:00 2001 From: kaashoek Date: Sat, 12 Aug 2006 04:33:50 +0000 Subject: fstat primitive ls --- ls.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 ls.c (limited to 'ls.c') diff --git a/ls.c b/ls.c new file mode 100644 index 0000000..ce08840 --- /dev/null +++ b/ls.c @@ -0,0 +1,43 @@ +#include "types.h" +#include "stat.h" +#include "user.h" +#include "fs.h" + +char buf[512]; +struct stat stat; +struct dirent dirent; + +int +main(int argc, char *argv[]) +{ + int fd; + uint off; + + if(argc > 1){ + puts("Usage: ls\n"); + exit(); + } + + fd = open(".", 0); + if(fd < 0){ + printf(2, "ls: cannot open .\n"); + exit(); + } + if (fstat(fd, &stat) < 0) { + printf(2, "ls: cannot open .\n"); + exit(); + } + if (stat.st_type != T_DIR) { + printf(2, "ls: . is not a dir\n"); + } + for(off = 0; off < stat.st_size; off += sizeof(struct dirent)) { + if (read(fd, &dirent, sizeof(struct dirent)) != sizeof(struct dirent)) { + printf(2, "ls: read error\n"); + exit(); + } + printf(1, "%s\n", dirent.name); + } + close(fd); + + exit(); +} -- cgit v1.2.3