MIT 6.s081 lab1.1–sleep
No.1 获取传递给程序的命令行参数
根据user/echo.c可知如何取得:
int main(int argc, char *argv*[]*){
int i;
*for*(i = 1; i < argc; i++){
write(1, argv[i], strlen(argv[i]));
//用户输入echo a时,传入两个参数echo和a,也即argc,此时argv[]={echo, a}.
//值得注意的细节是i = 1,也就是说排除echo,直接读命令
*if*(i + 1 < argc){
write(1, " ", 1);
//如果还有命令,跳过命令的空格(因为一般命令行输入命令都通过空格分割)
} *else* {
write(1, "\n", 1);
//否则已经执行到结尾,结束。
}
}
exit(0);
}
//也就是说,整个echo的功能是读取输入的东西,然后打印到屏幕。
再看下一条:atoi转化为数字,以及sleep的参数定义:
int atoi(const char *s)
int sleep(int);
因为sleep需要输入的只有sleep之后的一个参数,并且题目要求忘记传参时需要打印错误,那么就很清楚了。模仿echo的程序如下:
int main(int argc, char* argv[])
{
//参数已经通过argv传递,不用write,否则会显示到屏幕上,不对。
if(argc != 2){
fprintf(2, "error: inter an number.\n");
exit(1);
}
sleep(atoi(argv[1]));//只需要转化sleep后的字符
exit(0);
}
No.2 心得
第一个自己做出来的实验,中间理解传参花了一些时间,但是实现的那一刻还是很爽的!【用时半天】