MIT 6.s081 实验解析——labs1
2023-12-22 21:09:27
系列文章目录
MIT 6.s081 实验解析——labs1
测试判断流程
- 完成代码后将.c文件放入user文件夹中
- 在makefile文件的UPROGS处添加要测试的文件,如要添加的是sleep.c,则写为_sleep。
- 重新编译xv6
make qemu
- 退出qemu,在文件夹下输入
./grade-lab-util <文件名>
//以sleep为例
./grade-lab-util sleep
sleep
?? 第一个实验虽然简单,但可以通过这个程序来了解整个命令的运行过程。我们将sleep命令编译入系统之后,在shell里输入sleep 10,shell接受到这段参数之后,进行判断,这是一个程序调用的指令。
//sh.c对应源码
case EXEC:
ecmd = (struct execcmd*)cmd;
if(ecmd->argv[0] == 0)
exit(1);
exec(ecmd->argv[0], ecmd->argv);
fprintf(2, "exec %s failed\n", ecmd->argv[0]);
break;
可以看到在shell的内部,将第一个参数作为文件名,第二个参数作为接受参数,通过exec系统调用对应程序,这才进入到我们自己写的sleep程序中运行。注意:是将整个argv[]传给了sleep,包括argv[0]。
sleep程序很简单,当参数不为2时,直接警告参数错误,并exit(1)退出。当参数正确时,用atoi函数将字符串转为int,然后直接使用sleep系统调用,最后exit(0).
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
int main(int argc,char* argv[]){
if(argc!=2){
fprintf(2,"error,please input correct time");
exit(1);
}
sleep(atoi(argv[1]));
exit(0);
}
未完待续
文章来源:https://blog.csdn.net/weixin_48956191/article/details/135159909
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!