linux下system函式的原始碼:
#include
#include
#include
#include
intsystem
(const
char
* cmdstring)if(
(pid =
fork()
)<0)
else
if(pid ==0)
else}}
return status;
}
system的引數可以很明顯看出來就是在終端的命令
當system接受的命令為null時直接返回
否則fork出乙個子程序,父程序使用waitpid等待子程序結束(放置殭屍金程序),子程序則是呼叫execl來啟動乙個程式,
execl("/bin/sh", 「sh」, 「-c」, cmdstring,(char*)0)是呼叫shell,這個shell的路徑是/bin/sh,後面的字串都是引數,然後子程序就變成了乙個 shell程序,這個shell的引數是cmdstring。
為了更好的理解system()函式返回值,需要了解其執行過程,實際上system()函式執行了三步操作:
1.fork乙個子程序;
2.在子程序中呼叫exec函式去執行command;
3.在父程序中呼叫wait去等待子程序結束。
1) 對於fork失敗,system()函式返回-1。
2)如果exec執行成功,也即command順利執行完畢,則返回command通過exit或return返回的值。(注意,command順利執行不代表執行成功,比如command:「rm debuglog.txt」,不管檔案存不存在該command都順利執行了)
3)如果exec執行失敗,也即command沒有順利執行,比如被訊號中斷,或者command命令根本不存在,system()函式返回127. 如果command為null,則system()函式返回非0值,一般為1.
直接放兩段**品味品味吧:
#include
#include
#include
intmain()
return0;
}
#include
#include
#include
#include
#include
#include
#include
intmain()
else
if(pid >0)
}else
}return0;
}
程序管理之system
includeint system const char command 首先要知道,system函式是c庫中的函式,而不是系統呼叫。其實system函式使用起來並不複雜,難就難在對其返回值的理解。這個問題,下文會詳細分析。引數的話,很簡單,就是終端的命令即可。這是因為system函式的實現中呼叫了...
程序控制之system函式
1.system函式 include int system const char cmd 如果cmd是乙個空指標,則僅僅當命令處理程式可用時,system返回非0值。因為system在其實現中呼叫了fork,exec和waitpid,因此有三種返回值 1 如果fork失敗或者waitpid返回除ei...
程序狀態和system函式
朱老師物聯網大講堂 學習筆記 先fork建立子程序,然後子程序接著exec執行自己的程式,程序狀態,就緒態,即我準備好了,執行態,就緒態得到cpu就進入執行態開始執行,殭屍態,等待態,等待某個資源,又可以細分為淺度睡眠和深度睡眠,停止態,暫停了,可以被喚醒,源自 system函式,相當於fork e...