Parent & Child Process - předání handle roury – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Parent & Child Process - předání handle roury – C / C++ – Fórum – Programujte.comParent & Child Process - předání handle roury – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
hlucheucho+10
Posthunter
7. 8. 2015   #1
-
0
-

Ahoj,

pomocí CreatePipe(....) a CreateProcess(...) vytvořím anonymní rouru a spustím Child proces. Jak Child procesu předám handle jeho konce roury? Nejde mi o přesměrování standartního vstupu/výstupu.

OS Windows 7

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:79a9:65...–
Reklama
Reklama
KIIV+42
God of flame
7. 8. 2015   #2
-
0
-

#1 hlucheucho
jen tak letmo koukam na prototyp:


BOOL WINAPI CreateProcess(
  _In_opt_    LPCTSTR               lpApplicationName,
  _Inout_opt_ LPTSTR                lpCommandLine,
  _In_opt_    LPSECURITY_ATTRIBUTES lpProcessAttributes,
  _In_opt_    LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_        BOOL                  bInheritHandles,
  _In_        DWORD                 dwCreationFlags,
  _In_opt_    LPVOID                lpEnvironment,
  _In_opt_    LPCTSTR               lpCurrentDirectory,
  _In_        LPSTARTUPINFO         lpStartupInfo,
  _Out_       LPPROCESS_INFORMATION lpProcessInformation
);

a asi bych se mrkl na parametr bInheritHandles
 

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
hlucheucho+10
Posthunter
8. 8. 2015   #3
-
0
-

A dál? Nastavit na true stačit nebude. Co jsem vždycky našel, bylo přesměrování I/O, což znamená zapsat handle do STARTUPINFO struktury - zkoušel jsem a funguje. Rourou se mají přenést data uvedené hlavičkou ve které je deklarována délka dat. Data mohou obsahovat jakýkoliv znak. Myslím, že by bylo vhodnější používat ReadFile a WriteFile.

Ještě jsem narazil na funkci DuplicateHandle,

Předat handle jako parametr při spuštění procesu?

Ještě jsem zapomněl jednu důležitou věc: Child proces se vytváří s CREATE_NO_WINDOW jako dwCreationFlags.

Nahlásit jako SPAM
IP: 193.86.81.–
KIIV+42
God of flame
8. 8. 2015   #4
-
0
-

Jeste u CreatePipe je nastavitelne SECURITY_ATTRIBUTES, kde je ta bInheritHandle taky. Ale zatim jsem se behem tech par minut, co na to koukam, nedostal k tomu, jak ziskat ten handle v podprocesu..

Mozna by bylo lepsi pouzit pojmenovanou rouru a predat to jako parametr.

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
q
~ Anonymní uživatel
219 příspěvků
9. 8. 2015   #5
-
0
-

Zděděné handly mají v childu stejnou hodnotu jako v parentu. Stačí ji nějak předat.

Nahlásit jako SPAM
IP: 213.211.51.–
hlucheucho+10
Posthunter
9. 8. 2015   #6
-
0
-

#5 q
takže by se to dalo předat jako parametr, přesněji parametry - pro obousměrnou komunikaci jsou potřeba roury 2

hu


Nahlásit jako SPAM
IP: 193.86.81.–
Řešení
hlucheucho+10
Posthunter
10. 8. 2015   #7
-
0
-
Vyřešeno Nejlepší odpověď

Řešení: parent provede vše jako by child měl mít přesměrovaný vstup/výstup. Child po svém spuštění získá handle standartního vstupu 

HANDLE vstup;

vstup = GetStdHandle(STD_INPUT_HANDLE);

a takto získané handle použije při volání ReadFile. Podobně lze postupovat u handle standartního výstupu.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e12d:12...–
q
~ Anonymní uživatel
219 příspěvků
10. 8. 2015   #8
-
0
-

Není to přesně to, co jsi nechtěl? :-)

Nahlásit jako SPAM
IP: 213.211.51.–
hlucheucho+10
Posthunter
11. 8. 2015   #9
-
0
-

#8 q
Lepší řešení jsem nenašel. Použít ReadFile a WriteFile to umožňuje. Máš lepší nápad?

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:b199:64...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 55 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý