En utilisant _pipe () pour communiquer entre les processus

voix
0

Par souci de simplicité (comme je suis en train de mettre en œuvre un programme Unix sous Windows) Je suis désireux d'utiliser _pipe(), _write()et _read()de communiquer entre les processus. Dans Unix, je peux y parvenir en appelant pipe()avant fork.

J'ai essayé cela avec la mise en œuvre des processus dans Windows. Je fais appel _pipe()et passer ensuite l'écriture pipefdentier au nouveau processus. Cependant quand je tente de l' utiliser ou le fermer à l' intérieur du processus d'enfant que je reçois Debug Assertion Failed!depuis que je suppose, au processus de l' enfant, il est juste un entier ou quelque chose.

Voici un extrait de ma fonction principale dans le processus parent.

    //...

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

    //...

Comment dois - je prendre? Si je ne peux pas avec _pipe()ce qui est un travail facile autour?

Créé 02/09/2018 à 05:06
source utilisateur
Dans d'autres langues...                            

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