首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

在一個程序結束後運行另一個程序:exec/spawn/system 三族函數全解析

     編輯:C 語言基礎

方法一:批處理文件

最簡單:將程序依次列入 .BAT 文件,執行批處理自動順序運行。

方法二:exec/spawn 函數族(C 標準庫)

允許程序隨時啟動另一程序,後者運行將結束前者。若放在第一個程序末尾,即實現「接力運行」。

exec 族

  • 成員:execl, execle, execlpe, execv, execve, execvpe
  • 後綴含義:e=傳環境指針數組,l=命令行參數列表,p=搜索 PATH,v=參數指針數組。
  • 調用成功不返回,失敗返回 -1。
_execvpe("EDIT.COM", argv, envSing);  // 覆蓋當前進程運行 EDIT.COM

spawn 族

  • 成員:spawnl, spawnle, spawnlp, spawnlpe, spawnv, spawnve, spawnvp, spawnvpe
  • 關鍵差異:第一個參數指定模式 —— _P_OVERLAY(覆蓋,同 exec)或 _P_WAIT(等待子進程結束後返回繼續)。
_spawnvpe(_P_OVERLAY, "EDIT.COM", argv, envSing);  // 覆蓋模式
_spawnvpe(_P_WAIT, "EDIT.COM", argv, envSing);     // 等待模式

方法三:system() 函數

  • 掛起(而非結束)當前程序,啟動 COMMAND.COM 解析命令字符串。
  • 找不到 COMMAND.COM 則不執行(與 exec/spawn 不同)。
  • 返回執行狀態碼,而非子程序返回值。
sprintf(argS, "EDIT %s", argv[1] ? argv[1] : "HELLO");
ret = system(argS);
printf("system() returned %d\n", ret);  // 父進程繼續執行

選型建議

  • 需完全替換進程 → exec / spawn _P_OVERLAY。
  • 需父進程繼續 → spawn _P_WAIT / system。
  • 需 Shell 解析(通配符、管道、重定向) → system。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved