Я не понимаю, почему я даже не могу открыть именованный канал для записи, которую я создал в другом процессе.
Я получаю ошибку
231 (все экземпляры канала заняты).
Автор (клиент):
#include "Windows.h"
#include <stdio.h>
#include <errno.h>
int main()
{
HANDLE hpipe;
DWORD written;
char msg[] = "play asdf.wav";
hpipe = CreateFileA("\\\\.\\pipe\\isp-control",
GENERIC_WRITE | GENERIC_READ,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hpipe != INVALID_HANDLE_VALUE)
{
WriteFile(hpipe, msg, strlen(msg) + 1, &written, NULL);
printf("wrote %d bytes of %d: '%s'\n", written, strlen(msg) + 1, msg);
CloseHandle(hpipe);
}
else
{
printf("error %d opening pipe (handle %d)\n", GetLastError(), (int) hpipe);
return 1;
}
return 0;
}
Считыватель (сервер) ранее создал такой канал (обратите внимание на 4 случая, так что нужно быть свободным, не так ли?)
hpipe_ = CreateNamedPipeA("\\\\.\\pipe\\isp-control",
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
4, // number of instances
1024 * 16, // output buffer size
65535, // input size
2000, // default timeout ms
NULL);
, а затем использует PeekNamedPipe
, чтобы посмотреть, есть ли данные для чтения с помощью ReadFile
или отправки тайм-аута.