提问人:Shubham Bajaj 提问时间:11/5/2023 最后编辑:Shubham Bajaj 更新时间:11/5/2023 访问量:29
为什么代码没有将正确的数据写入输出文件 XV6
Why is the code not writting the correct data into the output file XV6
问:
我正在尝试制作一个接受 3 个操作(例如 ls、cat、echo)并将结果写入输出文件的函数。我创建了一个函数,该函数创建了 3 个新的 char 数组并将操作值存储在其中。问题是每当我调用 close(1) 时,我的代码都会一直等待并且永远不会退出。如果我注释掉那一行,那么文件就被创建了,但里面的数据是随机的。 代码如下:
`int handle_multiple_pipes(char **operation1, char **operation2, char **operation3){
int fd1[2];
if(pipe(fd1) == -1){
return -1;
}
int status;
int pid1 = fork();
if (pid1 < 0) {
return -1;
}
if(pid1 == 0){
close(1);
dup(fd1[1]);
close(fd1[1]);
close(fd1[0]);
exec(operation1[0], operation1);
exit(1);
}
int pid2 = fork();
if (pid2 < 0) {
return -1;
}
if(pid2 == 0){
close(0);
dup(fd1[1]);
close(fd1[1]);
close(1);
dup(fd1[0]);
close(fd1[1]);
exec(operation2[0], operation2);
exit(1);
}
int pid3 = fork();
if (pid3 < 0) {
return -1;
}
if(pid3 == 0){
int i=0;
int type_of_direction = 0;
char *output_file_path = "NULL";
while(operation3[i] != 0){
int redirection = strcmp(operation3[i], ">");
if (redirection == 0){
type_of_direction = 1;
output_file_path = operation3[i+1];
operation3[i] = '\0';
operation3[i+1] = '\0';
}
i++;
}
if (type_of_direction == 0){
close(0);
dup(fd1[0]);
close(fd1[0]);
close(fd1[1]);
exec(operation3[0], operation3);
exit(1);
}
else if (type_of_direction == 1){
printf("IN HERE 0\n");
int output_file = open(output_file_path, O_CREATE | O_WRONLY);
printf("IN HERE 1\n");
close(fd1[0]);
// close(fd1[1]);
printf("IN HERE 2\n");
wait(&status);
close(1);
printf("IN HERE 3\n");
dup(output_file);
printf("IN HERE 4\n");
exec(operation3[0], operation3);
close(output_file);
exit(1);
}
}
close(fd1[0]);
close(fd1[1]);
wait(&status);
wait(&status);
wait(&status);
return 1;
} `
我希望在输出文件中写入正确的数据。例如: 输入: ls |grep 测试 |grep 用户 预期输出:usertests 2 15 180504 电流输出:代码永不退出。
我还尝试调试代码,执行总是在关闭(1)时停止。我在另一个函数中使用相同的执行流程,并且正在工作。我只是无法理解这段代码的问题。
答: 暂无答案
评论