linux c語言將系統呼叫的執行結果賦給變數

2021-07-04 17:52:43 字數 1363 閱讀 8025

c語言中一說呼叫系統命令,都會想起system,這是system的用法

int system(char *command);

因此可見system返回的是乙個int型的變數,並不是該命令的執行結果,因此需要另外的函式popen來實現

#include >

file *popen( const char *command, const char*type);

函式說明:popen()會呼叫fork()產生子程序,然後從子程序中呼叫/bin/sh -c 來執行引數command 的指令。

引數type 可使用 "r"代表讀取,"w"代表寫入。依照此type 值,popen()會建立管道連到子程序的標準輸出裝置或標準輸入裝置,然後返回乙個檔案指標。隨後程序便可利用此檔案指標來讀取子程序的輸出裝置或是寫入到子程序的標準輸入裝置中。

此外,所有使用檔案指標(file*)操作的函式也都可以使用,除了fclose()以外。

返回值:若成功則返回檔案指標, 否則返回null, 錯誤原因存於errno 中.

錯誤**:einval 引數type 不合法。

注意事項:在編寫具 suid/sgid 許可權的程式時請盡量避免使用popen()、popen()會繼承環境變數,通過環境變數可能會造成系統安全的問題。

intpclose( file *stream);

舉例:c語言呼叫ls命令,獲取ls的執行結果

#include

int main(int argc,char *argv)

/*char buffer[80];

fgets(buffer, sizeof(buffer), fp);

printf("%s", buffer);

*/ pclose(fp);

################################3

voidexecutecmd(const

char*cmd,char*result)   

;   

file*ptr;   

strcpy(ps, cmd);   

if((ptr=popen(ps, "r"

))!=null)   

pclose(ptr);   

ptr = null;   

}   

else

Linux C語言內聯彙編 函式呼叫

int func int a,int b,int c,int d,int e,int x,int y,int z int main g s檢視彙編 subq 16,rsp pushq 8 pushq 7 movl 6,r9d movl 5,r8d movl 4,ecx movl 3,edx movl...

python呼叫Linux C系統使用者認證介面

p.s.使用python版本為2.7 py3有點小驚喜哦 我不寫c,原因暫不深究了 1.乙個基本使用者驗證介面無非包括兩點 使用者名稱 密碼 2.在密碼部分還需要考慮輸入不顯示提高安全性 大體只要實現這兩點功能,乞丐版功能便做完了。對於第一點 linux系統的使用者及認證資訊,儲存在passwd和s...

linux c語言獲取系統時間

gmtime 取得目前時間和日期 獲得相關函式 time,asctime,ctime,localtime 表頭檔案 include 定義函式 struct tm gmtime const time t timep 函式說明 gmtime 將引數timep 所指的time t 結構中的資訊 轉換成真實...