Привет ~ Я просто делаю пример программы, которая реализует команду pipe.
В этой программе я пытаюсь реализовать команду "cat somefile.txt | wc" ..
Поэтому я дважды вызвал fork (), я использовал первый дочерний процесс для отправки результатов"cat somefile.txt" в fd [1].
После этого второй дочерний процесс получает результат из fd [0] в текстовый массив. (Я подтвердил, что он успешно читает и сохраняет данные в текстовом массиве)
Итак, наконец, мне нужно вызвать функцию execl, выполняющую команду wc с текстовым массивом в качестве аргументов. Но, как вы знаете, wc нужно имя файла. Конечно, окончательный результат не тот, который я хотел .. Так что у меня сейчас проблемы.
Я искал execl, wc, но не смог найти никакой информации, которая говорит, что команда wc может использоваться с массивом символов.
У вас есть идеи для решения этой проблемы?
Вот код ..
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char text[80];
int main(int argc,char * argv[]){
int fd[2];
if(pipe(fd) == -1){
perror(argv[0]);
exit(1);
}
if(fork() == 0){ // execute cat somefile.txt
dup2(fd[1],1);
close(fd[0]); close(fd[1]);
execl("/bin/cat","cat","somefile.txt",(char *)0);
exit(127);
}
if(fork() == 0){ // execute wc and get datas from cat somefile.txt
dup2(fd[0],0);
close(fd[0]); close(fd[1]);
read_to_nl(text); // I defined but didn't post it. Anyway I confirmed it successfully get results from fd[0] to text array
execl("/usr/bin/wc","wc",text,(char *)0); // how to set arguments to complete command "cat somefile.txt | wc"?
exit(127);
}
close(fd[0]); close(fd[1]);
while(wait((int *) 0) != -1);
return 0;
}