keshav desai Ответов: 2

Линукс межпроцессного взаимодействия


Я хочу общаться между дочерним процессом и родительским процессом, но это не работает .
Дочерняя функция только выполняется и не переходит в родительскую функцию

Что я уже пробовал:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

int main(int argc, char const *argv[])
{
    int _pipe[2];
    char arr[30];
    int pid;

    pipe(_pipe);

    pid=fork();

    if(pid==0)
    {
        while(1)
        {
            write(_pipe[1],"Hello world",100);
            printf("child process\n");
            sleep(1);
        }
    }
    else if(pid>0)
    {
        wait(NULL);
        while(1)
        {
             printf("parent process\n");
            read(_pipe[0],arr,sizeof(arr));
            printf("%s",arr);
            sleep(1);
        }
    }

    
    return 0;
}

Richard MacCutchan

Видите ли вы какие-либо выходные данные из родительского процесса?

2 Ответов

Рейтинг:
14

Jochen Arndt

Это происходит по телефону подождите(2) - Страница руководства Linux[^] и имея бесконечное while цикл в вашем дочернем процессе. То wait() вызов будет блокировать родителя до тех пор, пока ребенок не завершится или не остановится / возобновится по сигналу. Но этого никогда не происходит в вашем коде.

Обратите также внимание, что неиспользуемая сторона канала должна быть закрыта, и вы отправляете ненужные данные, которые никогда не принимаются (вы отправляете 100 байт, но получаете только 30). Отправляйте только необходимое количество байтов (длина строки плюс один здесь) и используйте буфер приема, который достаточно велик, чтобы вместить максимум. количество байтов, которые могут быть отправлены.

Смотреть также 6.2.2 создание труб в C[^].


Рейтинг:
1

Richard MacCutchan

Видеть запись на трубу в C - Stack Overflow[^].