неименованый канал возврата отработаной программы
написал код который порождает дочерний процесс и посредством execl переопределяет своё содержимое вызовом другой программы
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stddef.h>
#define PATH "/bin/cat"
#define SORT "cat"
int print_help();
int main(int argc, char* argv[])
{
if(strcmp(argv[1],"-h") == 0 || argv[2] == NULL)
{
print_help();
}
if(argv[1] != NULL && argv[2] != NULL)
{
//data type
pid_t pid;
int rv;
//create new process
pid=fork();
if(pid == -1)
{
perror("fork");
exit(1);
}
//this process PARENT
if(pid != 0)
{
printf("\n\n*******PARENT*******\n");
printf(" PARENT: PID - %d\n", getpid());
printf(" PARENT: PID my CHILD %d\n", pid);
printf(" PARENT: i wait to exit()...\n");
wait(&rv); //waiting finish process
printf(" PARENT: code exit CHILD:%d\n",WEXITSTATUS(rv));
printf(" PARENT: Exit!\n");
}
//this process CHILD
if(pid == 0)
{
printf("\n\n*******CHILD*******\n");
printf(" CHILD: PID - %d\n", getpid());
printf(" CHILD: PID my PARENT - %d\n",getppid());
printf("ARG0 - %s, ARG1 - %s ",argv[0],argv[1]);
printf("\n@@@@@@@Print file SORT:@@@@@@@\n");
execl (PATH, SORT, argv[1], argv[2], NULL);
_exit (rv); //without updating flow
}
}
}
//function print help
int print_help()
{
printf("\n******* HELP MAN *******\n Enter name sort file, and additional key \n example: \n ./orderfile -b orderfile.c\n");
return 0;
}
каким образом в дочернем процессе организовать двусторонний трубопровод, по даному условию:
Программа fpipe должна вызвать на выполнение программу cmd, передав ей, ес-
ли указаны, аргументы args. Стандартный вывод запущенной программы следует с
помощью неименованного канала переназначить таким образом, чтобы программа
fpipe читала его построчно
спасибо.