windows: можно ли сбросить (направить) текстовый файл в именованный канал

У меня есть установка, в которой программа получает ввод следующим образом:

1) пользователь вводит команду в командной строке

2) текст из командной строки пишется в именованный канал

3) процесс на другой стороне трубы читает входной разбор и выполняет команду

Я хотел бы иметь возможность хранить набор команд в текстовом файле, а затем иметь именованный канал для текстового файла.

есть ли способ соединить трубу и напильник вместе? или мне нужно прочитать текстовый файл и разбить его на строки, которые я буду писать в трубу одну за другой


person Eli    schedule 10.12.2009    source источник


Ответы (2)


Если вы используете именованный канал, это может быть возможно,

если вы взглянете на это, вы можно увидеть, что они используют простой CreateFile для открытия канала, взглянув на то вроде перенаправлять нельзя но читать и писать надо, по крайней мере с API то же самое ReadFile WriteFile.

void WriteToPipe(void) 

// Read from a file and write its contents to the pipe for the child's STDIN.
// Stop when there is no more data. 
{ 
   DWORD dwRead, dwWritten; 
   CHAR chBuf[BUFSIZE];
   BOOL bSuccess = FALSE;

   for (;;) 
   { 
      bSuccess = ReadFile(g_hInputFile, chBuf, BUFSIZE, &dwRead, NULL);
      if ( ! bSuccess || dwRead == 0 ) break; 

      bSuccess = WriteFile(g_hChildStd_IN_Wr, chBuf, dwRead, &dwWritten, NULL);
      if ( ! bSuccess ) break; 
   } 

// Close the pipe handle so the child process stops reading. 

   if ( ! CloseHandle(g_hChildStd_IN_Wr) ) 
      ErrorExit(TEXT("StdInWr CloseHandle")); 
} 
person RageZ    schedule 10.12.2009

Вы должны иметь возможность использовать TYPE:

TYPE "filename" | myprogram.exe

Однако это не сработает, если вам явно требуется именованный канал или вам нужно подключиться к уже запущенному процессу.

Хотя в этом случае вы можете использовать программу-заглушку, которая записывает свой STDIN в именованный канал.

person Anon.    schedule 10.12.2009