Задать вопрос
@Billy_Milligan

Как работать с PIPE?

Не получается передать структуру через PIPE другой программе. В интернете много примеров с fork(), но сделать тоже самое для 2 разных программ не получается.

1 программа:
int pipefd[2], rs;
    my_struct pipe_msg;
    char buf[sizeof(my_struct)];
    
    rs = pipe(pipefd);
       
       printf("pipe1 = %i, pipe2 = %i\n", pipefd[0], pipefd[1]);
    
        if(rs < 0) {
            printf("    *PIPE [  ERROR  ]\n");
            return -1;
        }

        printf("    *PIPE [  OK  ]\n");

        close(pipefd[1]);

        while(1) {
            read(pipefd[0], buf, sizeof(my_struct));

            if (strcmp("",buf)!=0)
            {
               memcpy(&pipe_msg, &buf[0], sizeof(my_struct));
            }

            memset(buf, 0, sizeof(buf));
        }


2 программа
PS: дескрипторы ставлю 3 и 4.
Делаю так, потому что увидел как тут передают дескриптор второй программе в виде параметра.
int rs;
   my_struct pipe_msg;
   char buf[sizeof(my_struct)];
   int pipefd[2] = {3,4}; //так как и в программе 1, дескрипторы всегда тоже 3 и 4
   
   pipe_msg.val1 = 2;
   pipe_msg.val2 = 3;
   
   memcpy(&buf[0], &pipe_msg, sizeof(my_struct));
    
   write(pipefd[1], &buf, sizeof(my_struct));

   perror("Write:");


Вторая программа выводит: bad file descriptor.
  • Вопрос задан
  • 3620 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Linux для робототехников
    3 месяца
    Далее
  • Stepik
    Основы Linux
    2 недели
    Далее
  • Учебный центр IBS
    AL-1801 ОС Astra Linux Special Edition 1.8 для пользователей
    1 неделя
    Далее
Решения вопроса 1
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Это не будет работать в таком виде. Файловые дескрипторы локальны для процессов. При fork дети наследуют открытые файловые дескрипторы парента, поэтому все работает. Решить эту проблему можно, но так никто не делает. Лучше использовать другой способ коммуникации.
named pipes
Или unix, tcp или udp сокеты в зависимости от того что вы хотите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Olej
@Olej
инженер, программист, преподаватель
Вторая программа выводит: bad file descriptor.

23626.jpg
Здесь решение всех ваших проблем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы