Ved hjelp av _pipe () for å kommunisere mellom prosesser

stemmer
0

For enkelhets skyld (som jeg prøver å implementere en Unix-program på Windows) Jeg ønsker å bruke _pipe(), _write()og _read()for å kommunisere mellom prosesser. I Unix, kan jeg oppnå dette ved å ringe pipe()før jeg fork.

Jeg har prøvd å gjennomføre dette med prosesser i Windows. Jeg kaller _pipe()og deretter passerer skrive pipefdheltall til den nye prosessen. Men når jeg prøver og bruke det, eller lukke den inne i barnet prosessen jeg får Debug Assertion Failed!siden jeg anta, til barnet prosessen, det er bare et tall eller noe.

Her er et utdrag fra min viktigste funksjon i den overordnede prosessen.

    //...

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

    //...

Hvordan skulle jeg gå om du gjør dette? Hvis jeg kan ikke med _pipe()hva som er en enkel jobb rundt?

Publisert på 02/09/2018 klokken 05:06
kilden bruker
På andre språk...                            

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