开始实验,懵逼进来,懵逼出去。
1.sleep程序
先看课程官网的要求。试图从XV6教材中吸取知识,看着看着就懵逼了。课程官网有一些提示,所以新建sleep.c。观察其他程序,包含有头文件、主函数。
//引入头文件
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
//主函数
int
main(int argc, char *argv[]){}
这个主函数有两个参数,我的疑问是,这两个参数有什么用?查找资料(链接)后:
int argc //参数个数,包含命令名
比如:
$ sleep 10
argc=2。命令名+1个参数,共2个参数
char *argv[] //获取输入参数
$ sleep 10
意味着:argv[0]的值是sleep,argv[1]的值是10
从user.h中可以找到sleep:
“Your sleep should pause for a user-specified number of ticks. ”
sleep函数只要1个int参数:用户输入的a user-specified number of ticks。
exit(0);//程序正常运行并退出
exit(1);//非正常运行导致退出
代码思路:
1.判断用户输入的参数个数是否合法
2.atoi函数将argv[1]的类型char转int
3.exit(0)退出
4.在 Makefile 中将sleep添加到 UPROGS
$U/_sleep\
push代码
遇到的问题:push的时候没有文件显示。
解决:commit之后就有了
sleep.c文件名从黄色变为白色。代码有修改也需要commit。
push成功:在仓库找到sleep.c
打开实验环境
进入终端
#打开容器
docker start -i ubuntu
克隆仓库代码,但是出现冲突。
我希望把新增代码和原有的代码合并。所以选择如下方式:参考
//进入原有代码目录
cd xv6_demo
//拉取远程仓库文件
git remote add origin <远程仓库地址>
git fetch origin
//远程仓库与本地文件合并
git merge origin/master
在 xv6_demo文件夹下进行 make qemu,会进行编译
输入测试用例。结果和官网上写的一样。
输入错误会输出提示信息。
测试结果
退出make qemu,在xv6_demo文件下,输入./grade-lab-util sleep
./grade-lab-util sleep
但是会报错
查了一下,输入以下内容修改文件权限
chmod 777 文件名
//文件名是 grade-lab-util
测试成功😇
To be continued