GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist das Äquivalent zu Posix popen() in der Win32-API?

MSDN erklärt, wie Sie das tun, was popen tut, indem Sie die Windows-API in Pipe Handle Inheritance verwenden. Hier bietet es ein gut dokumentiertes Beispiel. Es ist viel niedriger als das _popen Funktion, die in der von Jason verlinkten Laufzeitbibliothek zu finden ist, verwendet jedoch ausschließlich die Win32-API.


Leider ist es nicht besonders einfach.

Sie müssen eine Pipe mit der win32-Funktion (CreatePipe) erstellen, dann müssen Sie normalerweise das Ende der Pipe (DuplicateHandle) duplizieren, das Sie dem Unterprozess übergeben, damit es vererbt werden kann, andernfalls wird es nicht sein und kann daher nicht verwendet werden.

Dann müssen Sie einen Prozess mit CreateProcess erstellen (der viele Strukturzeiger benötigt, einschließlich einer STARTUPINFO) und in STARTUPINFO das Handle übergeben, das Sie als stdout dupliziert haben.

Dann können Sie vom lesenden Ende der Pipe lesen (ReadFile usw.), bis Sie eof erreichen, dann müssen Sie aufräumen, indem Sie alle verschiedenen Win32-Handles schließen.


Sie können _popen anrufen wenn Sie eine Konsolenanwendung schreiben. Weitere Informationen finden Sie in der Dokumentation auf der MSDN-Website:http://msdn.microsoft.com/en-us/library/96ayss4b(VS.80).aspx


Linux
  1. Was ist das Linux-Äquivalent zur DOS-Pause?

  2. Was bedeutet POSIX?

  3. Was ist das C++-Äquivalent für AutoResetEvent unter Linux?

  4. Was ist der Unterschied zwischen NPTL- und POSIX-Threads?

  5. Was wäre das Äquivalent der Win32-API in Linux?

Was ist das Äquivalent von Linux's ~ (Tilde) in Windows?

Was bedeutet das Linux-Pipe-Symbol | tun?

Was ist das Äquivalent von Bashs cat -n in PowerShell?

Was ist der Vorteil, wenn Sie Ihren eigenen Linux-Kernel kompilieren?

Was ist das FreeBSD-Äquivalent von Linux update-rc.d?

Was ist das systemd-Äquivalent von ntsysv?