C труба несколько сообщений только одно получено

Я пытаюсь отправить два сообщения от родителя получателю. Только один получен. Receiver использует stdin и stdout для канала и выводит результаты в std err Вот мой код.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>

int main(int argc,char * argv[])
{
    char buffer[100]; // The pipe's buffer
    int pipes[2];

    pid_t   childpid;

    if ( pipe(pipes) ){
        fprintf(stderr,"FATAL ERROR IN PIPE");
    }


    if((childpid = fork()) == -1){
            perror("fork");
            exit(1);
    }

    if(childpid == 0){
        close(pipes[1]);

        dup2(pipes[0],STDIN_FILENO);

        scanf("%s\n",buffer);
        fprintf(stderr,"REC: %s\n",buffer);
        scanf("%s\n",buffer);
        fprintf(stderr,"REC: %s\n",buffer);
        sleep(50);
    }
    else
    {
        close(pipes[0]);

        // Read in a string from the pipe 
        char* arr = "HelloWorld\n";
        write(pipes[1],arr,strlen(arr)+1);
        write(pipes[1],arr,strlen(arr)+1);  
        sleep(50);
    }
    return 0;   
}
4 голоса | спросил Antoun 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 19 Sep 2018 11:26:43 +0300 2018, 11:26:43

2 ответа


0
Одна проблема связана со следующей строкой:---- +: = 1 =: + ---- не читает конечный пробел (включая символы новой строки), если это не соответствует директиве.Но директива существует здесь.Таким образом, он ждет другой новой строки после обычной новой строки, которая следует за вводом.Удалите ---- +: = 2 =: + ---- в обоих операторах ---- +: = 3 =: + ---- .Во-вторых, вы должны изменить свои операторы ---- +: = 4 =: + ----, чтобы добавить в них ---- +: = 5 =: + ---- .В-третьих, не добавляйте 1 к ---- +: = 7 =: + ---- в ---- +: = 8 =: + ---- .Изменить его на:Оно работает.Посмотреть демо :Выход:
ответил P.W 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 19 Sep 2018 14:14:32 +0300 2018, 14:14:32
0
Проблема заключается в части ---- +: = 0 =: + ---- .Вы отправляете завершающий ---- +: = 1 =: + ----, а это ---- +: = 2 =: + ---- заканчивает тем, что составляет второе чтение "строки"---- +: = 3 =: + ---- :Если вы удалите ---- +: = 5 =: + ---- , вы получите обе строки (я также сократил время сна, потому что я недостаточно терпелив, чтобы ждать 50 секунд для результата):
ответил PSkocik 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 19 Sep 2018 11:41:39 +0300 2018, 11:41:39

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132