@14
1. Vytvořte rouru (CreatePipe)
2. jeden konec zduplikujte, tak aby se nastavilo sdílení (InheritHandle). Já to dělám s DUPLICATE_CLOSE_SOURCE, prostě jen kvůli tomu nastavení sdílení.
3. Nastavte tento konec do STARTUPINFO a zapněte příznak "UseStdHandles"
4. Vytvořte process CreateProcess
5. Zavřete ten konec předaný do nově vytvořeného procesu
6. Proveďte IO operaci na opačném konci podle směru.
7. Obdržíte chybu něco ve stylu "broken pipe" a to i v případě, že spuštěný proces bude ještě bežet.
8. Ve spuštěném procesu pokud handle vyzvednete přes GetStdHandle a provedete na něm IO, obdržíte ERROR_INVALID_HANDLE
Správnější postup by měl být, že na své straně ten druhý konec zavřete až v okamžiku, kdy si child process vyzvedne stdHandle a to zduplikuje. Ale to je šílenost. Druhé řešení je nezavírat ten konec, a při I/O s rourou si vždcky pošéfovat test, zda process ještě běží, aby to I/O bylo možno přerušit.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 51 085×
Přečteno 23 956×
Přečteno 22 882×
Přečteno 20 966×
Přečteno 17 768×