LINUX中system()函式詳解

2021-07-03 22:19:34 字數 1201 閱讀 5588

相關函式

fork,execve,waitpid,popen

表頭檔案

#include

定義函式

int system(const char * string);

函式說明

system()會呼叫fork()產生子程序,由子程序來呼叫/bin/sh-c string來執行引數string字串所代表的命令,此命》令執行完後隨即返回原呼叫的程序。在呼叫system()期間sigchld 訊號會被暫時擱置,sigint和sigquit 訊號則會被忽略。

返回值

=-1:出現錯誤

=0:呼叫成功但是沒有出現子程序

>0:成功退出的子程序的id

如果system()在呼叫/bin/sh時失敗則返回127,其他失敗原因返回-1。若引數string為空指標(null),則返回非零值》。 如果system()呼叫成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能為 system()呼叫/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認執行成功。

附加說明

在編寫具有suid/sgid許可權的程式時請勿使用system(),system()會繼承環境變數,通過環境變數可能會造成系統安全的問題。

範例 #i nclude

main()

執行結果:

-rw-r--r-- 1 root root 705 sep 3 13 :52 /etc/passwd

-r--------- 1 root root 572 sep 2 15 :34 /etc/shado

例2:

char tmp;

sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev);

system(tmp);

其中dev是/dev/sda1。

system原始碼

#include 

#include

#include

#include

int system(const

char * cmdstring)

if((pid = fork())<0)

else

if(pid == 0)

else

} }

return status;

}

linux中system和exec函式的區別

system 是用shell來呼叫程式 fork exec waitpid,而exec是直接讓你的程式代替用來的程式執行。system 是在單獨的程序中執行命令,完了還會回到你的程式中。而exec函式是直接在你的程序中執行新的程式,新的程式會把你的程式覆蓋,除非呼叫出錯,否則你再也回不到exec後面...

LINUX中編寫函式實現system功能

在linux程式設計中,經常要呼叫一些系統命令或shell指令碼來幫助我們完成一些操作,大部分情況下system函式可以勝任,但有時在操作完成之後,我們還要獲取它的輸出,這時system函式就無能為力了。為此我編寫了乙個函式,可以先讓系統執行一條命令,然後利用管道技術獲取它的輸出。上 cpp vie...

Linux中的system()函式工作原理

一 linux中的system 函式源 include include include include int system const char cmdstring if pid fork 0 else if pid 0 else return status 當system接受的命令為null時直...