簡體   English   中英

用非阻塞函數替換system()

[英]replace system() with non-blocking function

我不想在C程序中使用system(),因為system(3)會阻塞,而這不是我想要的。 最佳方法是什么?

我認為快速而又骯臟的動作是調用sytem(command&)。 &將產生新的過程。

使用fork()創建一個新進程,然后在其中使用system() (或任何exec函數)。 然后,原始過程將能夠繼續執行。

答案取決於您的真正目標是什么。 您沒有說您使用的是什么平台,而且我對Windows知之甚少,因此這僅涵蓋您在linux / unix上的選擇。

  1. 您只想生成另一個程序,而無需與之交互。 在這種情況下,請調用fork() ,然后在子進程中運行execve() (或相關函數)。

  2. 您想與另一個程序進行交互。 在這種情況下,請使用popen()

  3. 您希望程序的一部分作為子進程運行。 在這種情況下,請使用fork() ,並調用在子級中運行所需的任何函數。

  4. 您需要與作為子進程運行的部分程序進行交互。 調用pipe()以便您有一個文件描述符可以進行通信,然后調用fork()並使用文件描述符對進行通信。 或者,您可以通過套接字,消息隊列,共享內存等進行通信。

您可能要使用popen 它創建新流程,並允許您將流程輸出重定向到自己的流程。

如果在Windows中,請使用Windows API中的ShellExecute()函數。

如果在Unix中, fork()提到fork()然后再選擇system()

如果要在特定時間后退出命令,如何使用“超時”命令:

例如:system(“超時5您的命令在這里”); //如果未完成,則在5秒內終止命令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM