(一)檔案操作函式
(1)open:建立了一條到檔案或裝置的訪問路徑,成功將返回乙個可被read、write其他系統呼叫使用的檔案描述符。
#include#include#includeint open(char*dpath,int flag, /*mode_t mode*/):
成功返回新得檔案描述符,失敗返回-1並設定全域性變數errno指明失敗原因
檔案描述符唯一,不與其他程序共享。若兩個程式同時開啟乙個檔案,他們會分別得到兩個不同的檔案描述符,都對檔案進行寫操作,會各寫各的不會,分別接著上次離開的位置往下寫,不會交織,而是覆蓋.
flag引數:必須檔案訪問模式 + 可選模式(用按位或操作)
使用帶o_creat標誌建立檔案必須使用帶mode引數的open函式,mode是幾個標誌「按位或」後得到的。
例如:
open(「myfile」,o_caret,s_irusr|s_ixoth);
建立myfile檔案,檔案屬主用於讀許可權,其他使用者擁有執行許可權,且只設定了這些許可權。
對訪問許可權產生影響的因素有兩種:
指定訪問許可權在建立時才會使用;
使用者掩碼(uamsk)
舉例:使用者雅掩碼為001,並且指定s_ixoth,那麼其他使用者不會擁有執行許可權,因為umask不允許。所以open、create呼叫中的標誌實際上是發出設定請求,決定權在umask的值。
umask:系統變數。作用是當檔案建立時為檔案的訪問許可權設定乙個掩碼。
由三個數組成:使用者(user)組(grap)其他使用者(other;每個數字有四種選擇:0(任何許可權)4(讀許可權)2(寫許可權)1(執行許可權)。
(2)create:建立乙個新檔案
#includeint creat(const char *pathname, mode_t mode);
返回值:成功返回為只寫開啟的檔案描述符,出錯返回-1
次函式等效於:
open(pathname,o_wronly|o_creat|o_trunc,mode);
#includesize_t read(int fildes,void *buf,size_t nbytes);
#includesize_t write(int fildes,void *buf,size_t nbytes);
(4)close:終止檔案描述符fildes與其對應檔案之間的關聯。檔案描述符被釋放並能夠重新使用。
#includeint close(int fildes);
成功返回0,失敗返回-1
父程序開啟的檔案子程序也能共享。
#include#include off_t lseek(int fildes,off_t offset,int whence);
成功返回檔案頭到檔案指標被設定處的位元組偏移值,失敗返回-1。
off引數用來指定位置:
whence引數:定義該偏移值用法
seek_set:offset是乙個絕對位置
seek_cur:offset是乙個相對於當前位置的乙個相對位置
seek_end:offset是乙個相對於檔案尾的乙個相對位置。
(二)獲取檔案屬性函式
#include#includeint stat(const char *restric pathname,struct stat* restruct buf);
int fstat(int fildes,struct stat* buf);
int lstat(const char *restric pathname,struct stat* restruct buf);
三個函式的返回值:若成功則返回0,若出錯則返回-1
一旦給出pathname,stat函式就返回與此命名檔案有關的資訊結構。fstat函式獲取已在描述符filedes上開啟檔案的有關資訊。lstat含稅類似於stat,但是當命名的檔案是乙個符號鏈結時,lstat返回該符號鏈結的有關資訊,而不是由該符號鏈結引用檔案的資訊。
(三)掃瞄目錄函式
(二)系統呼叫函式&庫函式
系統呼叫函式:系統核心丟擲來給使用者空間呼叫的介面。系統呼叫函式由使用者態呼叫,在核心態執行。
庫函式:在庫函式實現,在使用者態呼叫,執行時在使用者態執行。但是有些庫函式需要想換掉系統呼叫函式。
庫函式與系統呼叫函式的區別:
(三)核心態&使用者態
核心態:作業系統核心空間,擁有作業系統最高許可權。
使用者態:使用者空間,最低許可權。
以open系統呼叫函式為例:
linux使用者態與核心態通訊及如何編寫核心模組
通訊方式 procfs socket syscall ioctl 常用的是socket syscall ioctl.ioctl機制,ioctl機制可以在驅動中擴充套件特定的ioctl訊息,用於將一些狀態從核心反應到使用者態。ioctl有很好的資料同步保護機制,不要擔心核心和使用者層的資料訪問衝突,但...
計算機原理 怎樣去理解Linux使用者態和核心態?
在linux技術討論中經常會使用者態和核心態術語脫口而出,可你們想過嗎?使用者態和核心態代表是什麼?本片文章,就來談一談這個話題。我們先來看一張linux整體架構圖。從圖上我們可以看出來通過系統呼叫將linux整個體系分為使用者態和核心態 或者說核心空間和使用者空間 那核心態到底是什麼呢?其實從本質...
linux核心態使用者態
概述 linux系統使用者態和核心態相關知識,linux核心版本為3.10.79。使用者態和核心態定義 核心態 cpu可以訪問記憶體所有資源,包括外圍裝置.可以進行處理器工作模式切換,程式的切換。使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置,不可以進行處理器模式切換。為什麼分使用者態和核心態...