csapp ch10.9 家庭作业

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32768743/article/details/87477169

在这里插入图片描述
在这里插入图片描述
按题目要求运行

的确出现了问题,但是,我在CLION中运行报错不一样
在这里插入图片描述
在这里插入图片描述
目前感觉这个问题的流程应该是打开foo.txt,它的fd是3,然后3再作为fstatcheck的参数执行
但是重定向不知道原始的文件名
在这里插入图片描述
这个实验结果,我觉得现在只差把0重定向到3就完成这个作业了
最后的代码

#include "csapp.h"
int main (int argc, char **argv) {
    if (argc != 2) {
        printf("Usage: %s <filename>\n", argv[0]);
        exit(0);
    }
    for(int i = 0; i < argc; i ++) {
        printf("%d. argv = %s\n", i, argv[i]);
    }
    if (Fork() == 0) {
        Dup2(STDIN_FILENO,atoi(argv[1]));
        char * new_argv[ ]={"ch10.8",argv[1],(char *)0};
        char * envp[ ]={"PATH=/mnt/c/Users/pikachu/CLionProjects/csapp_solution/cmake-build-debug/ch10.8",0};
        Execve("/mnt/c/Users/pikachu/CLionProjects/csapp_solution/cmake-build-debug/ch10.8/ch10.8", new_argv, envp);
    }
    wait(NULL);
    exit(0);
}

在编写这个代码的时候,重定向一直理不清
在这里插入图片描述
在这里插入图片描述
简单说就是读newfd的时候读的就是oldfd,我这里要读3的时候,需要读1,因此应该是
dup2(0, 3)
最后卡在Execve上,这个函数比较奇葩
在这里插入图片描述
我在调用的时候总是
在这里插入图片描述
就是参数写错了
第一个参数,绝对路径
第二个参数,写文件名就好了,再加其他传入的参数
第三个参数,path要写可执行文件的目录的绝对路径
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_32768743/article/details/87477169