windows:是否可以将文本文件转储(直接)到命名管道中

时间:2009-12-10 08:38:48

标签: c++ windows named-pipes

我有一个程序获取其输入的设置:

1)用户在命令提示符中输入命令

2)命令提示符中的文本被写入命名管道

3)管道另一端的进程正在读取输入解析并执行命令

我希望能够在文本文件中存储一组命令,然后使用文本文件的命名管道。

有没有办法将管道和文件组合在一起?或者我是否需要阅读文本文件并将其拆分为我将逐一写入管道的行

2 个答案:

答案 0 :(得分:1)

您应该可以使用TYPE

TYPE "filename" | myprogram.exe

如果明确要求命名的管道,或者需要管道进入已经运行的进程,这将不起作用。

虽然在这种情况下,您可以使用存根程序将其STDIN写入命名管道。

答案 1 :(得分:1)

如果您使用命名管道,则可能

如果您查看this,可以看到他们使用普通CreateFile打开管道,看看that,看来您无法重定向但是必须读取和写入,至少与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")); 
}