Название говорит само за себя о том, что я хочу сделать, вот мой текущий код:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main() {
pid_t pid ;
int fd[2], fd2[2];
pipe(fd);
pipe(fd2);
pid = fork();
if(pid == 0) {
close(1);
dup(fd[1]);
close(fd[0]);
close(fd[1]);
char *exp[] = {"cat", "filename.txt", NULL};
execvp("cat", exp);
exit(EXIT_FAILURE);
}
else if(pid > 0) {
close(1);
dup(fd2[1]);
close(fd2[0]);
close(fd2[1]);
char *exp[] = {"grep", "-w", "stringname", NULL};
execvp(exp[0], exp);
pid_t pid2=fork();
close(0);
dup(fd[0]);
close (fd[1]);
close(fd[0]);
char *exp2[] = {"grep", "-c", "stringname", NULL};
execvp(exp2[0], exp2);
exit(EXIT_FAILURE);
}
else {
printf("Error in forking");
exit(EXIT_FAILURE);
}
close(fd[0]);
close(fd[1]);
close(fd2[0]);
close(fd2[1]);
return 0;
}
В настоящее время программа компилируется, но не выполняется (она застревает где-то при выполнении, и я не получить какой-либо вывод), любая помощь о том, что я делаю неправильно и как я могу это исправить?