GNU/Linux >> Znalost Linux >  >> Linux

Co je ekvivalentem Posix popen() v Win32 API?

MSDN vysvětluje, jak děláte to, co dělá popen pomocí Windows API v Pipe Handle Inheritance. Zde poskytuje dobře zdokumentovaný příklad. Je to mnohem nižší úroveň než _popen funkce nalezená v runtime knihovně propojené Jasonem, ale používá výhradně Win32 API.


Bohužel to není nijak zvlášť snadné.

Musíte vytvořit roura pomocí funkce win32 (CreatePipe), pak obvykle musíte duplikovat konec roury (DuplicateHandle), který dáváte podprocesu, aby bylo možné jej zdědit, jinak nebude a proto nelze použít.

Poté musíte vytvořit proces pomocí CreateProcess (který vyžaduje mnoho ukazatelů struktury, včetně STARTUPINFO) a předat STARTUPINFO handle, který jste duplikovali, jako jeho stdout.

Poté můžete číst od čtecího konce roury (ReadFile atd.), dokud nedosáhnete eof, pak musíte vyčistit zavřením všech různých ovladačů win32.


Můžete zavolat _popen pokud píšete konzolovou aplikaci. Další informace naleznete v dokumentaci na webu MSDN:http://msdn.microsoft.com/en-us/library/96ayss4b(VS.80).aspx


Linux
  1. Jaký je ekvivalent /proc/cpuinfo na FreeBSD v8.1?

  2. Jaký je rozdíl mezi vlákny NPTL a POSIX?

  3. Jaký by byl ekvivalent Win32 API v linuxu?

  1. Co je Unix/Linux ekvivalentem Registered I/O?

  2. Jaký je ekvivalent linuxového příkazu updatedb pro Mac?

  3. Co je ekvivalentní příkazu Linux File pro Windows?

  1. Jaký je ekvivalent linuxového ~ (tilda) ve Windows?

  2. Co znamená symbol linux pipe | dělat?

  3. Jaký je ekvivalent Bashovy kočky -n v PowerShellu?