Мне нужна помощь в возврате «кода состояния» из моей дочерней программы обратно в родительскую, где она проверит код состояния, напечатает код и выйдет из родительской. Это для классного проекта, поэтому я поместил здесь соответствующий код, но не буду публиковать весь проект по очевидным причинам.
Я разветвил и создал дочерний процесс через exec. Родительский процесс выполняет некоторые сложные вычисления и использует именованный канал для передачи данных дочернему процессу. Ребенок занимается более сложной математикой. Когда я использую ключевое слово, дочерний элемент должен вернуть родителю количество раз, которое он выполнил причудливую математику на своем конце, где родитель увидит это, распечатает возвращенное число и выйдет из родителя.
int status;
pid_t child_id;
child_id = fork();
if (child_id == 0)
{
// put child code here
exec(opens second process);
}
if (child_id < 0)
{
perror("fork failed\n");
exit(EXIT_FAILURE);
}
while(child_id != 0)
{
//parent process
//do fancy math stuff here
// pipe
//open pipe
//converted math to "string" to pass to other program
// use fprintf to send data to other program
fprintf(fp,"%s",str);
//close pipe
//**************************************************
//this block doesn't work, always returns 0
if (WIFEXITED(status)){
int returned = WEXITSTATUS(status);
printf("exited normally with status %d\n",returned);
}
//***************************************************
return 0;
Вторая программа на языке C представляет собой простое чтение конвейера, выполняет более сложные математические операции и имеет операторы возврата, размещенные там, где я хочу вернуть число.
Насколько я понимаю, есть способ передать возвращаемое значение из дочерней программы, но я не могу понять, как это сделать. Я добавил кусок кода, который я нашел, но я не могу заставить его работать. Я читал об этом, но, может быть, я что-то упустил?
пожалуйста, не обращайте внимания на любые проблемы с синтаксисом или структурой.
exec()
вставьте следующие две строки:perror( "exec failed" )l exit( EXIT_FAILURE );
для «редкого» случая, когда вызовexec()
не удался - person user3629249   schedule 23.04.2017