Для простоты (как я пытаюсь реализовать программу 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()
что это легкая работа вокруг?