这里写目录标题

  • xv-6 EX2
    • 基础知识
    • trace
    • sysinfo
  • xv-6 EX1
    • read
    • xargs
    • find
    • 详解xv-6之ls

xv-6 EX2

基础知识

图片说明了每个文件在【从用户态到内核态】的【工作机制】中
所处的位置https://www.cnblogs.com/YuanZiming/p/14218997.html

文字描述了每个文件的具体内容/作用https://zhuanlan.zhihu.com/p/371396502

trace

具体实验过程https://blog.csdn.net/u013577996/article/details/109166463
配合食用https://zhuanlan.zhihu.com/p/274369780

sysinfo

https://zhuanlan.zhihu.com/p/274369780

https://blog.csdn.net/u013577996/article/details/109166463

xv-6 EX1

read

while(read(p[0], &i, 4) > 0) {// i从管道p读取内容if (i % prime != 0) {write(p2[1], &i, 4);// 将i写入管道p}
}

xargs

https://blog.csdn.net/laplacebh/article/details/117518581

字符串指针:
https://www.cnblogs.com/focusDing/p/12435239.html

find

参考一:
https://blog.csdn.net/u013577996/article/details/108680888
参考二:
https://zhuanlan.zhihu.com/p/272199762
参考三:
https://blog.csdn.net/laplacebh/article/details/117518581

详解xv-6之ls

参考:https://zhuanlan.zhihu.com/p/353963631

中文注释

#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
#include "kernel/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;
}void
ls(char *path)
{char buf[512], *p;int fd;struct dirent de;//指的是目录项这一结构体(在kernel/fs.h中定义)struct stat st;//指的是文件的统计信息(在kernel/stat.h中定义)//包含文件类型(目录或文件)/inode/文件引用nlink/文件大小/存放fs的disk devif((fd = open(path, 0)) < 0)//open系统调用 打开文件//第二个参数指示的是打开方式,0代表的是O_RDONLY只读的形式。//返回值是file descriptor >=0,<0说明open失败{fprintf(2, "ls: cannot open %s\n", path);return;}if(fstat(fd, &st) < 0)//fstat与open类似,将fd指代的文件的相关信息存入结构体st中{fprintf(2, "ls: cannot stat %s\n", path);close(fd);return;}//以上两个if是对读入失败的情况进行处理switch(st.type){case T_FILE://如果是文件//直接打印st存储的文件的相关信息//st.type有三个值分别是({1:目录,2:文件,3:console}) fmtname返回值就是文件名称printf("%s %d %d %l\n", fmtname(path), st.type, st.ino, st.size);break;case T_DIR://如果是目录if(strlen(path) + 1 + DIRSIZ + 1 > sizeof buf)//if用来检查缓存有没有溢出{printf("ls: path too long\n");break;}//下面的几句话就是在拼接字符串//目的是为了以路径名访问这个目录里面的内容, read操作就是在访问目录内容strcpy(buf, path);p = buf+strlen(buf);*p++ = '/';//p指向的指针的内容是buf?while(read(fd, &de, sizeof(de)) == sizeof(de))//读取fd,存到de{if(de.inum == 0)//代表了此文件夹无文件,所以直接continue进行下一次readcontinue;memmove(p, de.name, DIRSIZ);//将de.name的内容移动到p指向的指针中//memmove实现在(user/ulib.c),主要意思就是内存之间的迁移p[DIRSIZ] = 0;if(stat(buf, &st) < 0){printf("ls: cannot stat %s\n", buf);continue;}printf("%s %d %d %d\n", fmtname(buf), st.type, st.ino, st.size);}break;}close(fd);
}int
main(int argc, char *argv[])
{int i;if(argc < 2){//判断argc,输入只有“ls"//没有其他参数ls(".");//调用ls函数,参数为.,即当前文件夹exit();}for(i=1; i<argc; i++)ls(argv[i]);exit();
}

xv-6 EX(学习路径 超全总结 持续更新中)相关推荐

  1. C++学习笔记目录链接(持续更新中)

    学习目标: C++学习笔记目录链接(持续更新中,未完待续) 学习内容: 序号 链接 0 C++ 常见bug记录(持续记录中) 1 C++学习笔记1[数据类型] 2 C++学习笔记2[表达式与语句] 3 ...

  2. 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)

    大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员~ 2020年拼多多校招面试题及答案-最全最新-持续更新中(2) 2020年拼多多校招面试题一面 2020年拼多多校招面试题一面- ...

  3. 2020年拼多多校招面试题及答案-最全最新-持续更新中

    大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员 2020年拼多多校招面试题及答案-最全最新-持续更新中 2020年拼多多校招面试题一面-牛客网 2020年拼多多校招面试题二面- ...

  4. [源码、文档、分享] iOS/iPhone学习系列、代码教程----~~~持续更新中~~~

    转自:http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97%E3%80%81%E4%BB%A3 ...

  5. 2019 CSS经典面试题(史上最全,持续更新中...)

    这些是我自己在学习过程中总结的一些知识点,本篇文章我将以面试题的形式分享给大家,希望对大家有所帮助,本文篇幅较长,您若认真看完,并且反复阅读,我相信对您的学习或者是面试,都会有一定帮助,同时希望大家批 ...

  6. iOS/iPhone学习系列、代码教程----~~~持续更新中~~~

    http://www.devdiv.com/forum.php?mod=viewthread&tid=48165   part 1--入门: 1. xcode 版本下载 以及 iphone s ...

  7. 李宏毅2020机器学习深度学习 笔记1(理论上持续更新中)

    我真的超能鸽

  8. jQuery学习总结之基础知识----持续更新中

    语法总结和注意事项 1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象 ...

  9. html盒子整体向下移动,盒子上下左右居中方法全(持续更新中)

    总是忘记这几个方法,今天来记录一下 一.已知大小盒子:左右居中 1. 使用定位,左右拉取方法: html: css: .box{width: 300px;height: 300px;border: 1 ...

最新文章

  1. 《编程匠艺》读书笔记
  2. C++显示转换、dynamic_cast重点
  3. ubuntu mysql navicat_Ubuntu搭建MySQL,Navicat Premium连接
  4. 开源应用框架BitAdminCore:更新日志20180817
  5. OpenGL拆分视图
  6. 使用编辑工具快速创建实体对象的方法
  7. i7 5500u linux,i7 5500u相当于什么cpu
  8. database design
  9. python的requests模块功能_requests模块的入门使用
  10. 表分析oracle的作用,Oracle中分析表的作用
  11. node 学习 ——模块导出
  12. python:批量移动指定文件到指定文件夹(模板)
  13. 微信公众号查询粉丝列表
  14. 大脑计算机马云,马云对话马斯克:人和机器谁更聪明?两马吵起来了
  15. Python中的立方根
  16. 我的世界服务器刷怪笼怎么修改,我的世界毒蜘蛛刷怪笼改造经验农场教学
  17. 学机器视觉好找工作吗?人工智能机器视觉方向怎么样?
  18. 企业架构TOGAF介绍
  19. Vue生命周期axios
  20. 使用图形化界面时startxfce4,出现的cannot open /dev/tty0: Permission denied问题,解决方法

热门文章

  1. 分布式session问题
  2. Jquery 对select option的移除,设置页面input只读
  3. 动态设置input设置只读属性
  4. dubbo负载均衡。
  5. 分数的大小比较优秀教案_《分数的大小比较》教学教案范文
  6. c语言fmod函数6,C语言fmod()函数:对浮点数取模(求余)
  7. python爬虫新浪,网易,腾讯新闻及评论
  8. 布局类(02):【纲】Layout Management [官翻]
  9. javascript小实例之获取文本框的value值
  10. 五种常用的UPS电源并机方案,你用过哪种?