⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ls.c

📁 美国mit操作系统课程所用的一个教学操作系统xv6
💻 C
字号:
#include "types.h"#include "stat.h"#include "user.h"#include "fs.h"char*fmtname(char *path){  static char buf[DIRSIZ+1];  char *p;    // Find first character after last slash.  for(p=path+strlen(path); p >= path && *p != '/'; p--)    ;  p++;    // Return blank-padded name.  if(strlen(p) >= DIRSIZ)    return p;  memmove(buf, p, strlen(p));  memset(buf+strlen(p), ' ', DIRSIZ-strlen(p));  return buf;}voidls(char *path){  char buf[512], *p;  int fd;  struct dirent de;  struct stat st;    if((fd = open(path, 0)) < 0){    printf(2, "ls: cannot open %s\n", path);    return;  }    if(fstat(fd, &st) < 0){    printf(2, "ls: cannot stat %s\n", path);    close(fd);    return;  }    switch(st.type){  case T_FILE:    printf(1, "%s %d %d %d\n", fmtname(path), st.type, st.ino, st.size);    break;    case T_DIR:    if(strlen(path) + 1 + DIRSIZ + 1 > sizeof buf){      printf(1, "ls: path too long\n");      break;    }    strcpy(buf, path);    p = buf+strlen(buf);    *p++ = '/';    while(read(fd, &de, sizeof(de)) == sizeof(de)){      if(de.inum == 0)        continue;      memmove(p, de.name, DIRSIZ);      p[DIRSIZ] = 0;      if(stat(buf, &st) < 0){        printf(1, "ls: cannot stat %s\n", buf);        continue;      }      printf(1, "%s %d %d %d\n", fmtname(buf), st.type, st.ino, st.size);    }    break;  }  close(fd);}intmain(int argc, char *argv[]){  int i;  if(argc < 2){    ls(".");    exit();  }  for(i=1; i<argc; i++)    ls(argv[i]);  exit();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -