xv-6 EX(学习路径 超全总结 持续更新中)
这里写目录标题
- 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(学习路径 超全总结 持续更新中)相关推荐
- C++学习笔记目录链接(持续更新中)
学习目标: C++学习笔记目录链接(持续更新中,未完待续) 学习内容: 序号 链接 0 C++ 常见bug记录(持续记录中) 1 C++学习笔记1[数据类型] 2 C++学习笔记2[表达式与语句] 3 ...
- 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)
大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员~ 2020年拼多多校招面试题及答案-最全最新-持续更新中(2) 2020年拼多多校招面试题一面 2020年拼多多校招面试题一面- ...
- 2020年拼多多校招面试题及答案-最全最新-持续更新中
大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员 2020年拼多多校招面试题及答案-最全最新-持续更新中 2020年拼多多校招面试题一面-牛客网 2020年拼多多校招面试题二面- ...
- [源码、文档、分享] 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 ...
- 2019 CSS经典面试题(史上最全,持续更新中...)
这些是我自己在学习过程中总结的一些知识点,本篇文章我将以面试题的形式分享给大家,希望对大家有所帮助,本文篇幅较长,您若认真看完,并且反复阅读,我相信对您的学习或者是面试,都会有一定帮助,同时希望大家批 ...
- iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
http://www.devdiv.com/forum.php?mod=viewthread&tid=48165 part 1--入门: 1. xcode 版本下载 以及 iphone s ...
- 李宏毅2020机器学习深度学习 笔记1(理论上持续更新中)
我真的超能鸽
- jQuery学习总结之基础知识----持续更新中
语法总结和注意事项 1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象 ...
- html盒子整体向下移动,盒子上下左右居中方法全(持续更新中)
总是忘记这几个方法,今天来记录一下 一.已知大小盒子:左右居中 1. 使用定位,左右拉取方法: html: css: .box{width: 300px;height: 300px;border: 1 ...
最新文章
- 《编程匠艺》读书笔记
- C++显示转换、dynamic_cast重点
- ubuntu mysql navicat_Ubuntu搭建MySQL,Navicat Premium连接
- 开源应用框架BitAdminCore:更新日志20180817
- OpenGL拆分视图
- 使用编辑工具快速创建实体对象的方法
- i7 5500u linux,i7 5500u相当于什么cpu
- database design
- python的requests模块功能_requests模块的入门使用
- 表分析oracle的作用,Oracle中分析表的作用
- node 学习 ——模块导出
- python:批量移动指定文件到指定文件夹(模板)
- 微信公众号查询粉丝列表
- 大脑计算机马云,马云对话马斯克:人和机器谁更聪明?两马吵起来了
- Python中的立方根
- 我的世界服务器刷怪笼怎么修改,我的世界毒蜘蛛刷怪笼改造经验农场教学
- 学机器视觉好找工作吗?人工智能机器视觉方向怎么样?
- 企业架构TOGAF介绍
- Vue生命周期axios
- 使用图形化界面时startxfce4,出现的cannot open /dev/tty0: Permission denied问题,解决方法