подправил код, теперь sort работает[C]
//NAME PROG orderfile.c
#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 "/usr/bin/sort"
#define SORT "sort"
int main(int argc, char* argv[])
{
//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(); //!!?!?!??!??!?!??!?!?!
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 (EXIT_FAILURE); //without updating flow
}
}
[/C]
начитался манов
http://www.opennet.me/docs/RUS/glibc/glibc-23.html
http://www.opennet.me/docs/RUS/ipcbook/node7.html
man fork
man exec
теперь хотелось бы изложить ход понимания происходящего, верно ли всё осознаю
1) pid=fork()
породил в памяти новый процесс который идентичен текущему "запущеной программе orderfile.c" отличается лишь PID. операционная система переключилась на вновь созданый процесс во вновь созданом "дочернем процессе" был отработан if(pid == 0) ибо как гласит man дочерний процесс в качестве аргумента дескриптора pid_t получает 0.
После чего управление переместилось в процесс родитея где был получе pid поломка и отработало условие if(pid != 0).
всё ли верно изложил? подправьте дополните, спасибо.
Теперь хочу организовать механизм ожидания завершения работы потомка, в манах обнаружил что это можно реализовать используя функцию wait()
[C]
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(); //!!?!?!??!??!?!??!?!?!!!??!??!?????
printf(" PARENT: code exit CHILD:%d\n",WEXITSTATUS(rv));
printf(" PARENT: Exit!\n");
}
[/C]
котороя будет ждать возврата кода от потомка и посредством макроса WEXITSTATUS вывести его результат
но при использовании даной фции компилер ругается
orderfile.c:42: error: too few arguments to function ‘wait’
мало этой фции видите ли параметров, что за параметры? почему и зачем?
по поводу wait нет чёткого понимания. подскажите.
спасибо.