get fs,set fs使用原理

2021-04-18 08:38:39 字數 635 閱讀 2692

大家知道在核心中使用有些系統呼叫(如開啟,寫檔案等操作)需要使用get_fs,set_fs對他們進行保護。具體使用方法如下:

oldfs=get_fs();   

set_fs(kernel_ds);   

filp->f_op->write(filp,buf,size,&filp->f_pos);   

set_fs(oldfs);

只有使用上面的方法,才能在核心中使用open,write等的系統呼叫。其實這樣做的主要原因是open,write的引數在使用者空間,在這些系統呼叫的實現裡需要對引數進行檢查,就是檢查它的引數指標位址是不是使用者空間的,即判斷位址是不是在3g以下的,如果在3g以上,說明引數為核心空間,系統呼叫就會返回錯誤,我們這裡以open系統呼叫為例子:

它最終會呼叫下面所示的函式,其中就會對char __user *filename這個使用者指標進行判斷,如果它不是segment_eq(get_fs(), kernel_ds)就需要如上面描述的檢查它的指標是不是使用者空間指標。核心使用系統呼叫引數肯定是核心空間,為了不讓這些系統呼叫檢查引數所以必須設定  set_fs(kernel_ds)才能使用該系統呼叫

satic int do_getname(const char __user *filename, char *page)

Stdafx h使用原理

所謂標頭檔案預編譯,就是把乙個工程 project 中使用的一些mfc標準標頭檔案 如windows.h afxwin.h 預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。預編譯標頭檔案通過編譯stdafx.cpp生成,以工程名命名,由於預編...

dubbo使用原理

dubbo是阿里巴巴公司開放源 的高效能優秀的伺服器框架,使得應用可通過高效能的rpc實現服務的輸入和輸出功能,可以與spring進行繼承。上述的工作原理 provider 暴露服務方稱之為 服務提供者 consumer 呼叫遠端服務 方稱之為 服務消費者 registry 服務註冊與發現的中心目錄...

git 使用原理

對git操作最大的功臣就是.git目錄下的head head是什麼 head其實是乙個類似於指標的東西,只不過這個指標的含義是指向當前的分支,當你再 git checkout 分支 的時候這個分支就會指向該分支 我們看看下面 1.1圖1.1可以看出當前head指向的分支testbranch,而tes...