_pipe () kullanarak işlemler arasında iletişim kurmak için

oy
0

Kolay anlaşılması için ben kullanmak isteyen (Windows üzerinde Unix programı uygulamaya çalışıyorum gibi) _pipe(), _write()ve _read()süreçler arasında iletişim kurmak için. Unix, ben çağırarak bunu başarabilirsiniz pipe()I önce fork.

Ben Windows süreçlerle bu uygulamaya çalıştılar. Seni arıyorum _pipe()ve sonra yazma geçen pipefdyeni sürece tamsayı. Ancak ben denemek ve kullanmak, yoksa olsun çocuk sürecinin içine kapattığınızda Debug Assertion Failed!varsayıyorum çünkü çocuk sürecine, sadece bir tamsayı falandır.

İşte ebeveyn sürecinde benim ana işlevinden snippet'idir.

    //...

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

    //...

Bunu hakkında nasıl gitmek? Eğer ben yapamam _pipe()etrafında kolay bir iş ne?

Oluştur 02/09/2018 saat 05:06
kaynak kullanıcı
Diğer dillerde...                            

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