The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"execl из форкнутого потомка"
Отправлено freelan, 26-Май-09 15:17 
подправил код, теперь 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]

начитался манов
https://www.opennet.ru/docs/RUS/glibc/glibc-23.html
https://www.opennet.ru/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 нет чёткого понимания. подскажите.
спасибо.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру