簡體   English   中英

如何在不使用system,popen,fork,exec的情況下在C / Linux中執行外部命令?

[英]How can I execute an external commands in C/Linux without using system, popen, fork, exec?

我想知道是否有什么好方法可以在Linux環境下使用C語言在不使用system(),popen(),fork(),exec()的情況下執行外部命令?

我不能使用這些功能的原因是我的主應用程序已經用完了嵌入式板上的大部分系統資源(即內存)。 如果我進行了分叉,則開發板將無法創建主應用程序的副本。 從我讀過的書中可以看到,system()和popen()實際上都在下面使用fork(),所以我也不能使用它們。

我目前唯一的想法是在運行主應用程序並使用IPC(管道或套接字)之前創建一個進程,以使新進程知道使用system()或popen()運行它需要哪些外部命令並將結果返回完成后轉到我的應用程序。

你不可以做這個。 Linux通過順序調用fork()exec()來創建新進程。 沒有其他方法可以創建流程。

但是fork()本身非常有效。 它對子進程使用寫時復制 ,因此fork()直到真正需要時才復制內存。 因此,如果在fork()之后立即調用exec() ,則系統不會占用太多內存。

UPD。 我騙你說關於流程創建。 實際上,存在fork()內部使用的clone()調用。 該調用提供了對流程創建的更多控制,但是使用起來可能很復雜。 閱讀man 2 forkman 2 clone以獲取更多信息。

暫無
暫無

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

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