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

Това обаче няма да работи, ако изрично изисквате named канал или трябва да прехвърлите канал към вече работещ процес.

Въпреки че в този случай можете да използвате програма за мъниче, която записва своя STDIN в посочения канал.

person Anon.    schedule 10.12.2009