1. 程式人生 > >struct file中f_mode和f_flags區別

struct file中f_mode和f_flags區別

mode_t f_mode:檔案模式(FMODE_WRITE,FMODE_READ),用在建立檔案時使用

它通過FMODE_READ和FMODE_WRITE位來標識檔案是否可讀或可寫,因為核心在呼叫驅動程式的read和write前已經檢查了訪問許可權。所以不必為這兩個方法檢查許可權。在沒有獲得相應訪問許可權而開啟檔案的情況下,對檔案的讀寫操作將被核心拒絕,驅動程式無需為此而作額外的推斷。

unsigned int f_flags:檔案標誌,用在檔案本身已存在,指定開啟該檔案的方式

如O_RDONLY/O_NONBLOCK/O_SYNC。為了檢查使用者請求是否是非堵塞式的操作。驅動程式須要檢查O_NONBLOCK標誌,而其它標誌非常少用到。

注意,檢查讀/寫許可權應該檢視f_mode而不是f_flags。

全部這些標誌都定義在< linux/fcntl.h >

檔案讀/寫模式 mode、標誌 f_flags 都是裝置驅動關心的內容,而私有資料指標private_data 在裝置驅動中被廣泛應用,大多被指向裝置驅動自定義用於描述裝置的結構體。

檢測使用者開啟檔案的讀寫方式

驅動程式中經常會使用如下類似的程式碼來檢測使用者開啟檔案的讀寫方式


if (file->f_mode & FMODE_WRITE) //使用者要求可寫   
{   
}   
if (file->f_mode & FMODE_READ) //使用者要求可讀   
{ }

下面的程式碼可用於判斷以阻塞還是非阻塞方式開啟裝置檔案。


if (file->f_flags & O_NONBLOCK)    //非阻塞   
     pr_debug("open: non-blocking\n");   
else                                    //阻塞   
     pr_debug("open: blocking\n");