Как использовать команду Linux Linux с массивом символов? - PullRequest
0 голосов
/ 03 октября 2019

Привет ~ Я просто делаю пример программы, которая реализует команду 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;
}
...