1linux的系統呼叫
系統呼叫system calls
系統呼叫:system calls / linux api
是一些在應用程式裡呼叫的函式,這些函式間接地調 用了os中的功能(呼叫了linux核心的功能)
在地位上,與windows api對等
在本質上,只呼叫了linux kernel
在形式上,如果乙個函式不在任何庫中提供,則它是 系統呼叫。
如,printf不是系統呼叫,它是libc庫中的函式 mkdir是系統呼叫
例如,在命令列中,我們可以用命令
# mkdir testdir
來建立乙個子目錄testdir
那麼,如果我們想在程式中來建立乙個子目錄, 該呼叫哪個函式呢?
man mkdir (1號manual: 命令列的用法)
man 2 mkdir (2號manual: 函式的用法)
(注:mkdir有多條manual,我們檢視2號manual)
.#include
// linux
#include
#include
#include
int main()
參考文件
當我們需在程式中呼叫os的某個功能時,應 該想到用system call函式。
例如,建立目錄
檢視檔案屬性
檢視程序列表
獲取目錄下的所有檔案
如何檢視可用的系統呼叫?
man syscalls
根據函式名,再檢視該函式的幫助
(官網上提供了乙個html格式的文件,是linux1.0版本 系統呼叫,內容不全)
可以發現,以前學的open, close, read, write屬於system call,它們不依賴別的庫,直接由作業系統提供。
而pthread和dl不屬於系統呼叫,它們分別在pthread和 dl庫中提供。
2系統呼叫:讀取目錄
獲取目錄下的內容
本節課進一步示範system call的使用
需求:要求獲取某個目錄下的所有項(檔案/ 子目錄)的名稱。
步驟查詢文件,尋找可用的system call
opendir / readdir / closedir
檢視幫助
man opendir
測試**
測試函式的用法
整合**(封裝)
將測試**整合到目標專案中
3在**中呼叫系統命令
system()
如果有些命令你找不到對應的system call,那麼也可以在**裡直 接呼叫命令列。
system函式用法比較簡單:
int ret = system(「rm ‐rf *.txt」);
其返回值就是所呼叫的命名行的返回值。
注:實際上system函式將建立乙個子程序,並一直等待該程序結 束,該函式才返回。
這意味著,如果子程序要執行1分鐘才返回,那這個函式就會阻塞 1分鐘。如果子程序永不返回,則此函式永遠阻塞。。。
popen()
popen():呼叫某個命令列,並獲取其標準輸出。p代表 pipe
file* fp =popen
(「ifconfig」, 「r」);
int n = fread(buf, 1, 512, fp);
pclose
(fp);
注意:(1)按linux programmer』s manual, 必須用pclose關閉而不 是fclose。
(2)要用"r",不能用"rb"「rt」,因為它本質上不是普通文 件
popen()
popen在linux是乙個比較有用的函式,可以用 於獲取系統的配置。
有些配置用命令列比較方便,但卻找不到相 應的系統函式,所以只好用popen來讀取其輸 出。
優先找system call,找不到的時候再用popen
注:system是標準c函式
popen/pclose不是標準c函式,是linux下的特 有的函式。 (windows下相應的叫_popen/_pclose)
小結:學習資源 [1,system()
2,system()
《c語言/c++學習指南》linux開發篇
](
/detail/1353)
Linux檔案程式設計之 系統呼叫 open
1 相關函式說明 函式原型 int open const char pathname,int flags int open constchar pathname,int flags,mode t mode 如果使用了o creat標誌,則要使用這個函式,這時需要指定mode來表示檔案的訪問許可權 相...
Linux檔案程式設計之 系統呼叫 close
1 相關函式說明 相關函式 open,fcntl,shutdown,unlink,fclose 表頭檔案 include 定義函式 int close intfd 引數說明 引數fd為先前由open 或creat 所返回的檔案描述詞。當使用完檔案後若已不再需要則可使用close 關閉該檔案,而clo...
Linux檔案程式設計之 系統呼叫 read
1 相關函式說明 函式原型 int read int fd,void buf size t count 相關函式 readdir,write,fcntl,close,lseek,readlink,fread 表頭檔案 include 函式說明 從檔案描述符fd所指定的檔案中,讀取count個位元組,...