יצירת pipe
היי, ברצוני לבנות shell פשוט, לכן יצרתי Pipe וקיימת לי בעיה בקוד. הקלט הוא: ls | grep r
הפלט שאני מקבל הוא :
ls: cannot access grep. no such file or directory
ls: cannot access t. no such file or directory
ls: cannot access grep. no such file or directory
ls: cannot access t. no such file or directory
זה הקוד:
|pid_t pid1,pid2;
int fd[2];
pipe(fd);
pid1 = fork();
if(pid1<0){
perror("failed");
}
if(pid1==0){
close(1);
printf("%s\n", args[0]);
printf("%s\n", args[1]);
printf("%s\n", args[2]);
dup2(fd[1],1);
close(fd[0]);
close(fd[1]);
args[3] = NULL;
printf("****running ls****\n");
execvp(args[0], args);
perror("first failed");
}
pid2 = fork();
if(pid2<0){
perror("failed2");
}
if(pid2==0){
close(0);
dup2(fd[0],0);
close(fd[0]);
close(fd[1]);
args[3]= NULL;
execvp(args[0],args);
perror("second failed");
}
close(fd[0]);
close(fd[1]);
waitpid(pid1,NULL,0);
waitpid(pid2,NULL,0);
printf("exit\n");
}
|
היי, ברצוני לבנות shell פשוט, לכן יצרתי Pipe וקיימת לי בעיה בקוד. הקלט הוא: ls | grep r
הפלט שאני מקבל הוא :
ls: cannot access grep. no such file or directory
ls: cannot access t. no such file or directory
ls: cannot access grep. no such file or directory
ls: cannot access t. no such file or directory
זה הקוד:
|pid_t pid1,pid2;
int fd[2];
pipe(fd);
pid1 = fork();
if(pid1<0){
perror("failed");
}
if(pid1==0){
close(1);
printf("%s\n", args[0]);
printf("%s\n", args[1]);
printf("%s\n", args[2]);
dup2(fd[1],1);
close(fd[0]);
close(fd[1]);
args[3] = NULL;
printf("****running ls****\n");
execvp(args[0], args);
perror("first failed");
}
pid2 = fork();
if(pid2<0){
perror("failed2");
}
if(pid2==0){
close(0);
dup2(fd[0],0);
close(fd[0]);
close(fd[1]);
args[3]= NULL;
execvp(args[0],args);
perror("second failed");
}
close(fd[0]);
close(fd[1]);
waitpid(pid1,NULL,0);
waitpid(pid2,NULL,0);
printf("exit\n");
}
|