版权声明:本文为博主原创文章,未经博主允许不得转载。 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要写可执行文件的目录的绝对路径