QNX之編寫資源管理器(三)

QNX相關(guān)歷史文章:

POSIX-Layer Data Structures

這篇文章主要講述和POSIX-Layer例程支持相關(guān)的幾個(gè)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。

1. Introduction

資源管理器定義了三個(gè)與POSIX-Layer相關(guān)的數(shù)據(jù)結(jié)構(gòu):

  • iofunc_ocb_t茫孔,包含了每次打開的數(shù)據(jù)谣旁,比如打開文件的偏移等莉炉;
  • iofunc_attr_t洗做,資源管理器有時(shí)可能得管理多個(gè)設(shè)備驯嘱,比如devc-ser*對(duì)應(yīng)到/dev/ser1灶壶,/dev/ser2等义郑,這個(gè)結(jié)構(gòu)包含一個(gè)名字對(duì)應(yīng)的數(shù)據(jù)蝶柿;
  • iofunc_mount_t,主要用于文件系統(tǒng)非驮,設(shè)備通常不需要這個(gè)結(jié)構(gòu)交汤;
    三者之間的關(guān)系如下:
    A resource manager is responsible for three data structures
Multiple clients with multiple OCBs, all linked to one mount structure

2. iofunc_ocb_t結(jié)構(gòu)

OCB(Open Control Block)結(jié)構(gòu),用于維護(hù)客戶端和資源管理器之間特定會(huì)話的狀態(tài)信息劫笙,在open()時(shí)創(chuàng)建芙扎,在close()時(shí)退出。這個(gè)數(shù)據(jù)結(jié)構(gòu)用于iofunc layer中的幫助函數(shù)填大。該結(jié)構(gòu)至少包含以下內(nèi)容:

typedef struct _iofunc_ocb {
    IOFUNC_ATTR_T   *attr;
    int32_t         ioflag;
    off_t           offset;
    uint16_t        sflag;
    uint16_t        flags;
} iofunc_ocb_t;
  • attr戒洼,指向?qū)傩越Y(jié)構(gòu)體;
  • ioflag允华,包含了資源打開模式:O_RDONLY/O_RDWR/O_WRONLY圈浇,對(duì)應(yīng)的ioflag值為_IO_FLAG_RD/_IO_FLAG_RD | _IO_FLAG_WR/_IO_FLAG_WR寥掐,這些信息從io_connect_t結(jié)構(gòu)體中繼承得來;
  • offset磷蜀,讀寫資源的偏移召耘,資源管理器可以修改這個(gè)成員;
  • sflag蠕搜,定義共享模式怎茫,從io_connect_t結(jié)構(gòu)中繼承得來收壕;
  • flags妓灌,當(dāng)設(shè)置IOFUNC_OCB_PRIVILEGED位時(shí),特權(quán)進(jìn)程來執(zhí)行open()操作蜜宪,此外也可以使用IOFUNC_OCB_FLAGS_PRIVATE范圍之內(nèi)的flag虫埂。資源管理器可以修改這個(gè)成員;

3. iofunc_attr_t結(jié)構(gòu)

這個(gè)結(jié)構(gòu)為資源管理器提供了設(shè)備的特征圃验,與OCB結(jié)構(gòu)結(jié)合使用掉伏。

typedef struct _iofunc_attr {
    IOFUNC_MOUNT_T            *mount;
    uint32_t                  flags;
    int32_t                   lock_tid;
    uint16_t                  lock_count;
    uint16_t                  count;
    uint16_t                  rcount;
    uint16_t                  wcount;
    uint16_t                  rlocks;
    uint16_t                  wlocks;
    struct _iofunc_mmap_list  *mmap_list;
    struct _iofunc_lock_list  *lock_list;
    void                      *list;
    uint32_t                  list_size;
    off_t                     nbytes;
    ino_t                     inode;
    uid_t                     uid;
    gid_t                     gid;
    time_t                    mtime;
    time_t                    atime;
    time_t                    ctime;
    mode_t                    mode;
    nlink_t                   nlink;
    dev_t                     rdev;
} iofunc_attr_t;
  • mount,指向掛載結(jié)構(gòu)體澳窑;
  • flags斧散,可以是不同比特位的組合,包括:IOFUNC_ATTR_ATIME/IOFUNC_ATTR_CTIME/IOFUNC_ATTR_DIRTY_NLINK/IOFUNC_ATTR_DIRTY_MODE/IOFUNC_ATTR_DIRTY_OWNER/IOFUNC_ATTR_DIRTY_RDEV/IOFUNC_ATTR_DIRTY_SIZE/IOFUNC_ATTR_DIRTY_TIME/IOFUNC_ATTR_MTIME摊聋,用于標(biāo)識(shí)修改記錄鸡捐。
  • lock_tidlock_count,用于多線程的加鎖和統(tǒng)計(jì)麻裁;
  • count, rcount, wcount, rlocks and wlocks箍镜,計(jì)數(shù)值及鎖;
  • mmap_list and lock_list煎源,mmap_list用于iofunc_mmap()iofunc_mmap_default()函數(shù)色迂,lock_list用于iofunc_lock_default()函數(shù),通常用戶不需要修改會(huì)檢查這兩個(gè)成員手销;
  • list and list_size歇僧,保留字段;
  • nbytes锋拖,資源的字節(jié)數(shù)馏慨,比如對(duì)于文件來說,放置的就是文件的大泄糜纭写隶;
  • inode,特定掛載點(diǎn)的inode讲仰,每個(gè)掛載點(diǎn)都必須是唯一的慕趴;
  • uid and gid,資源的用戶ID和組ID,通常由chown()等函數(shù)來更新冕房;
  • mtime, atime, and ctime躏啰,修改時(shí)間、訪問時(shí)間耙册,以及狀態(tài)改變時(shí)間给僵,是三個(gè)POSIX時(shí)間成員;
  • mode详拙,資源的模式帝际,定義在<sys/stat.h>中,以S_*開頭饶辙;
  • nlink蹲诀,鏈接數(shù)量;
  • rdev弃揽,包含字符特殊設(shè)備的設(shè)備號(hào)脯爪,以及指定專用設(shè)備的rdev號(hào);

4. iofunc_mount_t結(jié)構(gòu)(可選)

這個(gè)結(jié)構(gòu)中的成員矿微,尤其是confflags痕慢,可以修改某些iofunc層函數(shù)的行為。這個(gè)結(jié)構(gòu)中至少包含以下內(nèi)容:

typedef struct _iofunc_mount {
    uint32_t            flags;
    uint32_t            conf;
    dev_t               dev;
    int32_t             blocksize;
    iofunc_funcs_t      *funcs;
} iofunc_mount_t;
  • flags涌矢,包含一個(gè)相關(guān)的位用于標(biāo)識(shí)資源管理器使用的偏移量是32-bit的(與擴(kuò)展的64-bit偏移相反)掖举;
  • conf,包含以下位:IOFUNC_PC_CHOWN_RESTRICTED/IOFUNC_PC_NO_TRUNC/IOFUNC_PC_SYNC_IO/IOFUNC_PC_LINK_DIR/IOFUNC_PC_ACL蒿辙,這些選項(xiàng)是由iofunc_IO_PATHCONF默認(rèn)處理程序返回的;
  • dev拇泛,包含文件系統(tǒng)對(duì)應(yīng)的設(shè)備號(hào),當(dāng)客戶端調(diào)用stat()函數(shù)時(shí)思灌,會(huì)將該值填充到struct stat st_dev成員中俺叭;
  • blocksize,包含了設(shè)備的塊大刑┏ァ熄守;
  • funcs,這是一個(gè)struct _iofunc_funcs結(jié)構(gòu)耗跛,用于擴(kuò)展OCB裕照;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市调塌,隨后出現(xiàn)的幾起案子晋南,更是在濱河造成了極大的恐慌,老刑警劉巖羔砾,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件负间,死亡現(xiàn)場離奇詭異偶妖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)政溃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門趾访,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人董虱,你說我怎么就攤上這事扼鞋。” “怎么了愤诱?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵云头,是天一觀的道長。 經(jīng)常有香客問我转锈,道長盘寡,這世上最難降的妖魔是什么楚殿? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任撮慨,我火速辦了婚禮,結(jié)果婚禮上脆粥,老公的妹妹穿的比我還像新娘砌溺。我一直安慰自己,他們只是感情好变隔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布规伐。 她就那樣靜靜地躺著,像睡著了一般匣缘。 火紅的嫁衣襯著肌膚如雪猖闪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天肌厨,我揣著相機(jī)與錄音培慌,去河邊找鬼。 笑死柑爸,一個(gè)胖子當(dāng)著我的面吹牛吵护,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播表鳍,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼馅而,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了譬圣?” 一聲冷哼從身側(cè)響起瓮恭,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厘熟,沒想到半個(gè)月后屯蹦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诸衔,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年颇玷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笨农。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帖渠,死狀恐怖谒亦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情空郊,我是刑警寧澤份招,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站狞甚,受9級(jí)特大地震影響锁摔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哼审,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一谐腰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涩盾,春花似錦十气、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至址儒,卻和暖如春芹枷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莲趣。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鸳慈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妖爷。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓蝶涩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親絮识。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绿聘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容