יצירת pipe

techtest

New member
יצירת 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");

}
|
 

aviMalool

New member
שיפור קטן להודעה המקורית.

היי, techtest רוצה לבנות 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");

}

לא הצלחתי עם הטאבים בתחילת שורות. מקוה שהנסיונות לא מחקו משהו חשוב. לא יודע לענות על השאלה המקורית. ספק רב אם אדע.
 

aviMalool

New member
משהו כן עובד עם הטאבים/רוחים בתחילת שורות.

אצלי בתצוגה המקדימה בכלל לא היה ברור שמשהו כן עובד.
 
למעלה