Aquí podría ser tu PUBLICIDAD


Usando _pipe () para comunicarse entre los procesos

votos
0

Por razones de simplicidad (como estoy tratando de implementar un programa de Unix en Windows) que estoy queriendo utilizar _pipe(), _write()y _read()para la comunicación entre procesos. En Unix, puedo lograr esto llamando pipe()antes fork.

He tratado de implementar esto con los procesos de Windows. Estoy llamando _pipe()y luego pasando la escritura pipefdnúmero entero al nuevo proceso. Sin embargo cuando intento y lo uso, o cerca de ella dentro del proceso hijo consigo Debug Assertion Failed!, ya que supongo que, al proceso hijo, que es sólo un número entero o algo así.

Aquí hay un fragmento de mi función principal dentro del proceso padre.

    //...

    // 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]);

    //...

¿Cómo voy a ir haciendo esto? Si no puede con _pipe()lo que es un trabajo fácil por ahí?

Publicado el 02/09/2018 a las 05:06
fuente por usuario Wizard
En otros idiomas...        العربية       


Aquí podría ser tu PUBLICIDAD