Я хочу запустить: cat
somefile | program
> outputText в системе UNIX.Использовать вывод cat в другой программе с трубой в C
Я рассмотрел многие вещи, такие как труба, используя popen, dup2 и т. Д .; Я потерян.
Базовый код должен быть:
- Чтения любого выхода
cat
производит с помощьюprogram
и сделать некоторые магии, в то вывод данных в outputText.
Любые советы, пожалуйста?
P.S. Файлы представляют собой двоичные файлы.
UPDATE:
Я нашел этот код, который работает с заданной командой выше ... Но это делает вещи, которые я не хочу.
- Как избавиться от
sort
? Я пытался стереть вещи, но потом я получаю ошибки, и программа не запускается. - данных, считанных
cat
как двоичный - Выходные данные на терминал в виде двоичного
Любые советы, пожалуйста?
int main(void)
{
pid_t p;
int status;
int fds[2];
FILE *writeToChild;
char word[50];
if (pipe(fds) == -1)
{
perror("Error creating pipes");
exit(EXIT_FAILURE);
}
switch (p = fork())
{
case 0: //this is the child process
close(fds[1]); //close the write end of the pipe
dup2(fds[0], 0);
close(fds[0]);
execl("/usr/bin/sort", "sort", (char *) 0);
fprintf(stderr, "Failed to exec sort\n");
exit(EXIT_FAILURE);
case -1: //failure to fork case
perror("Could not create child");
exit(EXIT_FAILURE);
default: //this is the parent process
close(fds[0]); //close the read end of the pipe
writeToChild = fdopen(fds[1], "w");
break;
}
if (writeToChild != 0)
{
while (fscanf(stdin, "%49s", word) != EOF)
{
//the below isn't being printed. Why?
fprintf(writeToChild, "%s end of sentence\n", word);
}
fclose(writeToChild);
}
wait(&status);
return 0;
}
Почему бы вам использовать 'cat' к трубе в него, когда вы можете просто установить' 'stdin' из программы 'to' somefile'? то есть 'program < somefile > outputText' – FatalError
Моя задача указывает, что я должен сделать это, к сожалению. – raffaello
И файл, читаемый cat, является двоичным, и выход должен быть бинарным, если это возможно. – raffaello