首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 system() 啟動文件:start 命令與直接啟動的區別

     編輯:程式設計綜合問答

兩種寫法

system("cmd /c start out.txt");  // 方式一
system("out.txt");               // 方式二

核心區別

方式一:cmd /c start out.txt

  • 顯式啟動 cmd.exe,執行內部命令 start。
  • start 會根據文件關聯(如 .txt 關聯 Notepad)在**新視窗**啟動應用程序。
  • /c 參數表示執行完命令後關閉 cmd 視窗。
  • 可控制視窗狀態:start /min 最小化、start /max 最大化、start /wait 等待結束。
  • 適用於需顯式控制啟動行為的場景。

方式二:system("out.txt")

  • 直接將字串傳給命令解析器(Windows 下為 cmd /c 隱式執行)。
  • 依賴 PATHEXT 環境變量與文件關聯,行為等同於在 cmd 中直接輸入 out.txt 回車。
  • 若關聯正確,效果與方式一相同,但無法控制視窗屬性。
  • 更簡潔,但跨平台行為差異大(Linux 無此機制)。

底層機制(Windows)

system() 最終調用 CreateProcess 啟動 cmd.exe /c "命令"。
start 是 cmd 內部命令,會解析文件關聯(HKEY_CLASSES_ROOT\.txt)並啟動關聯程序(如 notepad.exe out.txt)。

最佳實踐

  • 僅需打開文件:system("out.txt") 即可。
  • 需指定程序、參數、視窗狀態:使用 ShellExecute (Windows API) 或 start "" "program.exe" "args"。
  • C 跨平台打開文件:推薦使用 xdg-open (Linux)、open (macOS)、start (Windows) 封裝函數。

總結

兩者本質相同,均通過文件關聯啟動默認程序。start 提供更豐富的啟動控制選項;直接文件名更簡潔。生產代碼建議使用平台原生 API(ShellExecute/CreateProcess/fork+exec)而非 system(),避免安全風險與性能開銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved