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

system() 函數返回值解析:跨平台錯誤碼處理規範

     編輯:關於C語言

返回值語義

返回值含義POSIX 宏
-1fork/exec 失敗,errno 指示原因—
>=0子進程退出狀態,需用宏解析WIFEXITED、WEXITSTATUS

標準檢查模式

int ret = system("TASKKILL /F /IM text.exe");
if (ret == -1) {
    perror("system failed");  // 查看 errno
} else if (WIFEXITED(ret)) {
    int exit_code = WEXITSTATUS(ret);
    if (exit_code != 0) fprintf(stderr, "Command exited with %d\n", exit_code);
} else if (WIFSIGNALED(ret)) {
    fprintf(stderr, "Killed by signal %d\n", WTERMSIG(ret));
}

Windows 特殊性

  • system() 返回命令的退出碼(cmd.exe 返回值)
  • 無 WIFEXITED 等宏,直接判斷 ret != 0 即可
  • 內建命令(如 dir、del)通常返回 0 表示成功

安全警示

  1. 命令注入:絕不拼接用戶輸入直接傳給 system()
  2. 性能:啟動 Shell 開銷大,高頻調用改用 exec 族/CreateProcess
  3. 可移植性:命令路徑、參數跨平台差異極大

現代替代方案

  • C++17:std::filesystem 文件操作
  • Boost.Process / popen 需要捕獲輸出
  • 系統編程:fork+execve (Linux) / CreateProcess (Windows)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved