Используя _pipe () для связи между процессами

голоса
0

Для простоты (как я пытаюсь реализовать программу Unix на Windows) Я хотел использовать _pipe(), _write()и _read()для связи между процессами. В Unix, я могу добиться этого с помощью вызова , pipe()прежде чем я fork.

Я попытался реализации этого с процессами в Windows. Я звоню , _pipe()а затем передавая записи pipefdцелого числа к новому процессу. Однако , когда я пытаюсь использовать его, или закрыть его внутри дочернего процесса я получаю , Debug Assertion Failed!так как я полагаю, в дочерний процесс, это просто целое число или что - то.

Вот отрывок из моей основной функции внутри родительского процесса.

    //...

    // Create pipe file descriptors for parent and child
    ret = _pipe(mypipefd, 256, O_BINARY);
    if (ret == -1) {
        error(Error creating pipe file descriptors);
    }

    // Read request from standard input
    printf(Enter a message: );
    memset(out_buffer, 0, BUFFER_SIZE);
    fgets(out_buffer, BUFFER_SIZE, stdin);
    out_buffer[strcspn(out_buffer, \r\n)] = 0;

    // Create command line arguments for child process
    snprintf(child_cmd, CMD_LINE_SIZE, %s %d \%s\, argv[2], mypipefd[1], out_buffer);

    // Create child process to handle request
    if ( !CreateProcess(
         C:\\Users\\Owner\\VisualStudio\\2803ICT_A1\\2803ICT_A1\\Debug\\Child_Client_WIN32.exe,        // No module name (use command line)
         child_cmd,      // Command line
         NULL,           // Process handle not inheritable
         NULL,           // Thread handle not inheritable
         FALSE,          // Set handle inheritance to FALSE
         0,              // No creation flags
         NULL,           // Use parent's environment block
         NULL,           // Use parent's starting directory
         &si,            // Pointer to STARTUPINFO structure
         &pi)            // Pointer to PROCESS_INFORMATION structure
         )
    {
        printf(CreateProcess failed : %d\n, GetLastError());
        exit(-1);
    }

    // Close child pipe
    _close(mypipefd[1]);

    //...

Как бы я идти об этом? Если я не могу с того, _pipe()что это легкая работа вокруг?

Задан 02/09/2018 в 05:06
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more