生活随笔
收集整理的這篇文章主要介紹了
C 语言中可以调用命令行指令的 system()函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C語言有一個(gè)system函數(shù)(在<stdlib.h>頭中,C++則為<cstdlib>頭),可以用來調(diào)用終端命令。原型如下:
int system(const char *cmdline /* 命令字符串 */); system函數(shù)調(diào)用/bin/sh ?執(zhí)行特定的shell命令,阻塞當(dāng)前的進(jìn)程知道shell命令執(zhí)行完畢。執(zhí)行system實(shí)際上是調(diào)用了fork函數(shù)(產(chǎn)生新進(jìn)程)、exec函數(shù)(在新進(jìn)程中執(zhí)行新任務(wù))、waitpid函數(shù)(等待新進(jìn)程結(jié)束)。
函數(shù)詳解 在 Linux 系統(tǒng)中(執(zhí)行shell 命令)
相關(guān)函數(shù) fork,execve,waitpid,popen
表頭文件 #include<stdlib.h>
定義函數(shù) int system(const char * string);
函數(shù)說明 system()會(huì)調(diào)用fork()產(chǎn)生子進(jìn)程,由子進(jìn)程來調(diào)用/bin/sh-c string來執(zhí)行參數(shù)string字符串所代表的命令,此命令執(zhí)行完后隨即返回原調(diào)用的進(jìn)程。在調(diào)用system()期間SIGCHLD 信號(hào)會(huì)被暫時(shí)擱置,SIGINT和SIGQUIT 信號(hào)則會(huì)被忽略。
返回值 如果fork()失敗 返回-1:出現(xiàn)錯(cuò)誤 如果exec()失敗,表示不能執(zhí)行Shell,返回值相當(dāng)于Shell執(zhí)行了exit(127) 如果執(zhí)行成功則返回子Shell的終止?fàn)顟B(tài) 如果system()在調(diào)用/bin/sh時(shí)失敗則返回127,其他失敗原因返回-1。若參數(shù)string為空指針(NULL),僅當(dāng)命令處理程序可用時(shí),返回非零值,可以通過這一特征判斷在一個(gè)給定的操作系統(tǒng)上是否支持system函數(shù)(當(dāng)system函數(shù)返回值為0時(shí),表明system函數(shù)無效,在UNIX系統(tǒng)中,system函數(shù)總是可用的);。如果system()調(diào)用成功則最后會(huì)返回執(zhí)行shell命令后的返回值,但是此返回值也有可能為 system()調(diào)用/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認(rèn)執(zhí)行成功。
附加說明 在編寫具有SUID/SGID權(quán)限的程序時(shí)請(qǐng)勿使用system(),system()會(huì)繼承環(huán)境變量,通過環(huán)境變量可能會(huì)造成系統(tǒng)安全的問題。 參考鏈接:http://blog.csdn.net/augusdi/article/details/20002519
轉(zhuǎn)載于:https://www.cnblogs.com/sylar5/p/6640078.html
總結(jié)
以上是生活随笔為你收集整理的C 语言中可以调用命令行指令的 system()函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。