程序控制之system函式

2021-04-25 03:16:15 字數 917 閱讀 9803

1. system函式

#include

int system(const char *cmd);

如果cmd是乙個空指標,則僅僅當命令處理程式可用時,system返回非0值。

因為system在其實現中呼叫了fork,exec和waitpid,因此有三種返回值:

1). 如果fork失敗或者waitpid返回除eintr之外的出錯,則system返回-1,而且errno中設定了錯誤型別。

2). 如果exec失敗(表示不能執行shell),則其返回值如同shell執行了exit(127)一樣。

3). 否則所有三個函式(fork,exec和waitpid)都執行成功,並且system的返回值是shell的終止狀態,其格式已經在waitpid中說明。

如果乙個程序正以特殊的許可權(設定使用者id和設定組id)執行,它又想生成另乙個程序執行另乙個程式,則它應當直接使用fork和exec,而且在fork之後,exec之前要更改回普通許可權。設定使用者id和設定組id程式絕不應呼叫system函式,因為特殊許可權會在system中執行了fork和exec後扔保持下來。

1.1. system函式原型(沒有訊號處理)

其中shell的-c選項是告訴shell程式取下乙個命令列引數作為命令輸入(而不是從標準輸入或從乙個給定的檔案中讀命令)。shell對以null字元終止的命令字串進行語法解析,將它們分成命令列引數。

如果不使用 shell執行此命令,而是試圖由我們自己去執行它,則必須用execlp而不是execl,像shell那樣使用path變數,必須將null結尾的命令字串分成各個命令列引數,以便呼叫execlp。最後,我們也不能使用任何乙個shell元字元。

注意,我們呼叫了_exit而不是exit,這是防止任一標準i/o緩衝區(這些緩衝區由父程序複製到子程序)在子程序中被沖洗。

1.2. 完整的system函式原型

程序控制之exec函式

1.exec函式 include int execl const char pathname,const char arg0,char 0 int execv const char pathname,const char argv int execle const char pathname,con...

程序控制之waitid函式

single unix specification的xsi擴充套件包括了另乙個取程序終止狀態的函式 waitid,此函式類似於waitpid,但提供了更多的靈活性。include int waitid idtype t idtype,id t id,siginfo t infop,int optio...

程序控制之exit函式

程序有下面5種正常終止方式 1 在main函式內執行return語句。這等效於呼叫exit。2 呼叫exit函式。此函式有iso c定義,其操作包括呼叫各終止處理程式 終止處理程式在呼叫atexit函式時登記 然後關閉所有標準i o流等。3 呼叫 exit或 exit函式。iso c定義 exit,...