DAY3
lab1已经是第三天了,今天必须结束了emmm
xargs
太菜了,每次都有思路,但是不知道如何执行emm,每次写不出来看别人的代码,发现思路和我基本一致,但是就是我不知道怎么去实现呜呜呜。这就是太久没写C++的问题所在么呜呜呜。
列一下思路把:
- 首先创建需要的变量,arg(用来一个个读取字符),args(用来读取所有参数),word(读取单个字符),buf(读取字符的位置).
- 首先照常的判定,
- 然后把argv中的参数传到args中,再把args中最后一个参数传入arg(因为这里只要求了一个参数),同时把args[argc]:最后一个参数后面一个参数设为0;
- 接下来开始按字符读取,注意字符串不能用==,但是char类型的字符还是可以的
- while(读取一个字符)
- 如果字符是'\n'或者' '
- 将arg的buf位设为空(下一位)
- 创建子进程,在子进程中执行,在父进程中将buf归位为0,方便下一个进程使用
- 如果不是,arg继续读入字符
- 执行完毕后,如果n <0,且没有退出,报错,退出
上代码emmm,我又仔细看了看,好像是我课没认真听,浪费了好多时间,下次一定认真听课呜呜呜。
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
#include "kernel/param.h"
#define MAX_ARG_LEN 1024
int main(int argc,char *argv[]){
int i,pid,n,buf = 0;
char word,arg[MAX_ARG_LEN],*args[MAXARG];
if(argc < 2){
fprintf(2,"Error:No enough values...\n");
exit(0);
}
for(i = 1;i < argc; i++) args[i-1] = argv[i];
args[argc - 1] = arg;args[argc] = 0;
while((n = read(0,&word,1)) > 0){
if(word == '\n' || word == ' '){
arg[buf] = 0;
if((pid = fork()) < 0){
fprintf(2,"Error: fork wrong");
exit(0);
}else if(pid == 0){
exec(args[0],args);
}else{
wait(0);//子进程执行完毕
buf = 0;
}
}else{
arg[buf++] = word;
}
}
if(n < 0){
fprintf(2,"Error: no more word");
exit(0);
}
exit(0);
}
leture
这节课主要讲了一点操作系统的关键内容,操作系统主要的隔离性。而隔离性又是如何去实现的呢?这就需要两个工具:user/kernel mode 和 virtual mermory。通过这两个去做,还从硬件层面上描述了一些隔离性的实现过程。
还有这节课讲了GDB的使用:
- c continue
- s step one line
剩下时间去写论文了,准备icme