Как в Perl писать в Named Pipe?

Есть программа, написанная на c++, она является pipe сервером, в ней выполняется следующий код:
HANDLE hPipe;
char buffer[1024];
DWORD dwRead;
String out = "";
hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\mypipe"), PIPE_ACCESS_DUPLEX | PIPE_TYPE_BYTE | PIPE_READMODE_BYTE,  
							PIPE_WAIT,
							1,
							1024 * 16,
							1024 * 16,
							NMPWAIT_USE_DEFAULT_WAIT,
							NULL);
	while (hPipe != INVALID_HANDLE_VALUE)
	{
		if (ConnectNamedPipe(hPipe, NULL) != FALSE)   // wait for someone to connect to the pipe
		{
			out = "";
			while (ReadFile(hPipe, buffer, sizeof(buffer) - 1, &dwRead, NULL) != FALSE)
			{
				buffer[dwRead] = '\0';
				out += buffer;
			}
		}
		WriteLog(0,"PIPE",out); //Этот код выводит на экран значение переменной out
		DisconnectNamedPipe(hPipe);
	}

Мне нужно чтобы при выполнении perl скрипта результат выводился в pipe. Вот мой perl скрипт:
sysopen(FIFO, "\\\\.\\pipe\\mypipe", O_WRONLY) or die "Couldn't open for writing: $!\n";
print FIFO "Hello world" or die "error print";
close FIFO;

Выводится надпись "error print"
Что я не так делаю?
На стороне сервера фиксируется подключение, но отсутствует чтение данных
  • Вопрос задан
  • 397 просмотров
Решения вопроса 1
@pcdesign
#!/usr/bin/perl -w
while (1) {
    open(FIFO, "> \\\\.\\pipe\\mypipe")
        or die "writing: $!\n";
    print FIFO "The current time is ", scalar(localtime), "\n";
    close FIFO;
    sleep 1;
}


или
IO::Pipe
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы