day3

62 阅读2分钟

DAY3

lab1已经是第三天了,今天必须结束了emmm

xargs

太菜了,每次都有思路,但是不知道如何执行emm,每次写不出来看别人的代码,发现思路和我基本一致,但是就是我不知道怎么去实现呜呜呜。这就是太久没写C++的问题所在么呜呜呜。

列一下思路把:

  1. 首先创建需要的变量,arg(用来一个个读取字符),args(用来读取所有参数),word(读取单个字符),buf(读取字符的位置).
  2. 首先照常的判定,
  3. 然后把argv中的参数传到args中,再把args中最后一个参数传入arg(因为这里只要求了一个参数),同时把args[argc]:最后一个参数后面一个参数设为0;
  4. 接下来开始按字符读取,注意字符串不能用==,但是char类型的字符还是可以的
    1. while(读取一个字符)
    2. 如果字符是'\n'或者' '
      1. 将arg的buf位设为空(下一位)
      2. 创建子进程,在子进程中执行,在父进程中将buf归位为0,方便下一个进程使用
    3. 如果不是,arg继续读入字符
    4. 执行完毕后,如果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的使用:

  1. c continue
  2. s step one line

剩下时间去写论文了,准备icme