中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

file結(jié)構(gòu)體 -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.szmdbiao.com - 電腦資料】

   

    struct file, 定義于 , 是設(shè)備驅(qū)動(dòng)中第二個(gè)最重要的數(shù)據(jù)結(jié)構(gòu),

file結(jié)構(gòu)體

。 注意 file 與用戶空間程序的FILE 指針沒有任何關(guān)系。 一個(gè) FILE 定義在 C 庫中, 從不出現(xiàn)在內(nèi)核代碼中。 一個(gè) struct file, 另一方面, 是一個(gè)內(nèi)核結(jié)構(gòu), 從不出現(xiàn)在用戶程序中。

    文件結(jié)構(gòu)代表一個(gè)打開的文件。 (它不特定給設(shè)備驅(qū)動(dòng); 系統(tǒng)中每個(gè)打開的文件有一個(gè)關(guān)聯(lián)的 structfile 在內(nèi)核空間)。 它由內(nèi)核在 open 時(shí)創(chuàng)建, 并傳遞給在文件上操作的任何函數(shù), 直到最后的關(guān)閉。 在文件的所有實(shí)例都關(guān)閉后, 內(nèi)核釋放這個(gè)數(shù)據(jù)結(jié)構(gòu)。

    在內(nèi)核源碼中, struct file 的指針常常稱為 file 或者 filp("file pointer")。 我們將一直稱這個(gè)指針為 filp 以避免和結(jié)構(gòu)自身混淆。 因此, file 指的是結(jié)構(gòu), 而 filp 是結(jié)構(gòu)指針。

    struct file 的最重要成員在這展示。

    1.mode_t f_mode;

    文件模式確定文件是可讀的或者是可寫的(或者都是), 通過位 FMODE_READ 和FMODE_WRITE. 你可能想在你的 open 或者 ioctl 函數(shù)中檢查這個(gè)成員的讀寫許可, 但是不需要檢查讀寫許可, 因?yàn)閮?nèi)核在調(diào)用你的方法之前檢查。 當(dāng)文件還沒有為那種存取而打開時(shí)讀或?qū)懙钠髨D被拒絕, 驅(qū)動(dòng)甚至不知道這個(gè)情況。

    2.loff_t f_pos;

    當(dāng)前讀寫位置。 loff_t 在所有平臺(tái)都是 64 位( 在 gcc 術(shù)語里是 long long )。 驅(qū)動(dòng)可以讀這個(gè)值,如果它需要知道文件中的當(dāng)前位置, 但是正常地不應(yīng)該改變它; 讀和寫應(yīng)當(dāng)使用它們作為最后參數(shù)而收到的指針來更新一個(gè)位置, 代替直接作用于 filp->f_pos. 這個(gè)規(guī)則的一個(gè)例外是在 llseek 方法中, 它的目的就是改變文件位置,

電腦資料

file結(jié)構(gòu)體》(http://www.szmdbiao.com)。

    3.unsigned int f_flags;

    這些是文件標(biāo)志, 例如 O_RDONLY, O_NONBLOCK, 和 O_SYNC. 驅(qū)動(dòng)應(yīng)當(dāng)檢查O_NONBLOCK 標(biāo)志來看是否是請(qǐng)求非阻塞操作; 其他標(biāo)志很少使用。 特別地, 應(yīng)當(dāng)檢查讀/寫許可, 使用 f_mode 而不是f_flags. 所有的標(biāo)志在頭文件 中定義。

    4.struct file_operations *f_op;

    和文件關(guān)聯(lián)的操作。 內(nèi)核安排指針作為它的 open 實(shí)現(xiàn)的一部分, 接著讀取它當(dāng)它需要分派任何的操作時(shí)。 filp->f_op 中的值從不由內(nèi)核保存為后面的引用; 這意味著你可改變你的文件關(guān)聯(lián)的文件操作, 在你返回調(diào)用者之后新方法會(huì)起作用。 例如, 關(guān)聯(lián)到主編號(hào) 1 (/dev/null, /dev/zero, 等等)的 open 代碼根據(jù)打開的次編號(hào)來替代 filp->f_op 中的操作。 這個(gè)做法允許實(shí)現(xiàn)幾種行為, 在同一個(gè)主編號(hào)下而不必在每個(gè)系統(tǒng)調(diào)用中引入開銷。 替換文件操作的能力是面向

    對(duì)象編程的"方法重載"的內(nèi)核對(duì)等體。

    5.void *private_data;

    open 系統(tǒng)調(diào)用設(shè)置這個(gè)指針為 NULL, 在為驅(qū)動(dòng)調(diào)用 open 方法之前。 你可自由使用這個(gè)成員或者忽略它; 你可以使用這個(gè)成員來指向分配的數(shù)據(jù), 但是接著你必須記住在內(nèi)核銷毀文件結(jié)構(gòu)之前, 在 release 方法中釋放那個(gè)內(nèi)存。 private_data 是一個(gè)有用的資源, 在系統(tǒng)調(diào)用間保留狀態(tài)信息, 我們大部分例子模塊都使用它。

    6.struct dentry *f_dentry;

    關(guān)聯(lián)到文件的目錄入口( dentry )結(jié)構(gòu)。 設(shè)備驅(qū)動(dòng)編寫者正常地不需要關(guān)心 dentry 結(jié)構(gòu), 除了作為 filp->f_dentry->d_inode 存取 inode 結(jié)構(gòu)。

    真實(shí)結(jié)構(gòu)有多幾個(gè)成員, 但是它們對(duì)設(shè)備驅(qū)動(dòng)沒有用處。 我們可以安全地忽略這些成員, 因?yàn)轵?qū)動(dòng)從不創(chuàng)建文件結(jié)構(gòu); 它們真實(shí)存取別處創(chuàng)建的結(jié)構(gòu)。

最新文章