程序入門之system

2021-10-16 17:28:04 字數 1339 閱讀 5593

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...