• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Onway

            我是一只菜菜菜菜鳥...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            APUE第十四章高級I/O 筆記

            Posted on 2011-12-27 10:17 Onway 閱讀(376) 評論(0)  編輯 收藏 引用 所屬分類: 使用說明
            2011-12-19 第十四章 高級I/O
            第一節 引言
            1,高級I/O包括:
            非阻塞I/O
            記錄鎖
            系統V流機制
            I/O多路轉接
            readv和writev函數
            存儲映像I/O(mmap)

            第二節 非阻塞I/O
            1,低速系統調用是可能會使進程永遠阻塞的一類系統調用。
            2,雖然讀寫磁盤文件會使調用者在短暫時間內阻塞,但并不能將與磁盤I/O有關的系統調用視為“低速”。
            3,對于一個給定的描述符有兩種方法對其指定非阻塞I/O:
            a,如果調用open獲得描述符,則可指定O_NONBLOCK標志
            b,對于已經打開的一個描述符,則可調用fcntl,由該函數打開O_NONBLOCK文件狀態標志。
            4,POSIX.1要求,對于一個非阻塞的描述符如果無數據可讀,則read返回-1,并且errno被設置為EAGAIN。
            5,文件狀態標志的更改影響同一文件表項的所有用戶,但與通過其他文件表項對同一設備的訪問無關。

            第三節 記錄鎖
            1,記錄鎖的功能是:當一個進程正在讀或修改文件的某個部分時,它可以阻止其他進程修改同一文件區。
            2,fcntl記錄鎖的基本規則是:多個進程在一個給定的字節上可以有一把共享的讀鎖,但是在一個給定的字節上只能有一個進程獨用一把寫鎖。進一步而言,如果在一個給定的字節上已經有一把或多把讀鎖,則不能在該字節上再加寫鎖;如果一個字節上已經有一把獨占性的寫鎖,則不能對它再加任何的讀鎖。
            3,上面說明的兼容性規則適用于不同進程提出的鎖請求,并不使用于單個進程提出的多個鎖請求。
            4,記錄鎖的自動繼承和釋放有三條規則:
            a,當一個進程終止時,它鎖建立的鎖全部釋放;任何時候關閉一個描述符時,該進程通過這一描述可以引用的文件上的任何一把鎖都被釋放。
            b,由fork產生的子進程不繼承父進程鎖設置的鎖。
            c,在執行exec后,新程序可以繼承原執行程序的鎖。
            5,在接近文件尾端加鎖或解鎖時需要特別小心。
            6,建議性鎖對非合作進程是不起作用的。
            7,linux中,使用強制性鎖需要在文件系統掛載的時候mount命令加上_omand選項以打開該機制。
            8,對于一個特定文件打開其設置組ID位,并關閉其組執行位,則對該文件開始了強制性鎖機制。

            第四節 STREAMS(看不懂啊!)
            1,STREAMS是系統V提供的構造內核設備驅動程序和網絡協議包的一種通用方法。
            2,流在用戶進程和設備驅動程序之間提供了一條全雙工通路。流無需和實際硬件設備直接會話,流也可以用來構造偽設備驅動程序。
            3,在Linux中,STREAMS子系統是可用的,但是用戶必須自行將該子系統安裝到系統中,通常它默認為不包括在系統中。

            第五節 I/O多路轉接
            1,I/O多路轉接:先構造一張有關描述符的列表,然后調用一個函數,直到這些描述符中的一個已準備好進行I/O操作時,該函數才返回。在返回時,它告訴進程哪些進程已經好可以進行I/O。這些函數即select和pselect函數。
            2,poll函數類似于select,但是其程序員接口則有所不同。
            3,雖然poll函數可用于任何類型的文件描述符,但它起源于系統V,所以poll與STREAMS系統緊緊相關。
            4,poll和select函數在被信號中斷后都不會被重啟動,即使啟用了SA_RESTART函數。

            第六節 異步I/O
            1,select和poll對任意描述符都能工作。
            2,在系統V派生的系統中,異步I/O只對STREAMS設備和STREAMS管道起作用。在BSD派生的系統中,異步I/O只對終端和網絡起作用。

            第七節 readv和writev函數
            1,readv和writev函數用于在一次函數調用中讀寫多個非連續緩沖區。

            第八節 readn和writen函數
            1,readn和writen函數并非任何標準的組成部分。
            2,注意read,write函數返回值小于要求值的情況。

            第九節 存儲映射I/O
            1,存儲映射I/O使一個磁盤文件與存儲空間中的一個緩沖區相映射。
            2,將一個普通文件復制到另一個普通文件中時,存儲映射I/O比較快。但是有一些限制,例如,不能用其在某些設備(如網絡設備或終端設備)之間進行復制,并且在對被復制的文件進行映射后,也要注意該文件的長度是否改變。

            第十節 小結


            PS:這章在STREAMS一節糾結了好久還是沒看懂,其他的也只是基本看了個概念。期間也跳到第十五章看了一下前幾節。
            国产精品久久毛片完整版| 韩国三级大全久久网站| 亚洲国产成人久久综合区| 免费一级欧美大片久久网| 亚洲国产精品嫩草影院久久| 国内精品伊人久久久久妇| 欧洲成人午夜精品无码区久久 | 色综合久久久久无码专区 | 国产亚洲欧美成人久久片 | 国产精品一久久香蕉国产线看观看| 99精品国产在热久久| 久久一区二区免费播放| 久久久久亚洲Av无码专| 久久无码人妻精品一区二区三区| 日韩人妻无码一区二区三区久久99| 国产∨亚洲V天堂无码久久久| 伊人久久大香线蕉综合网站| 99久久免费国产特黄| 中文字幕热久久久久久久| 久久成人国产精品一区二区| 国产午夜免费高清久久影院| 久久天天躁狠狠躁夜夜2020一| 日韩一区二区久久久久久| 久久夜色精品国产噜噜麻豆| 狠狠色丁香久久婷婷综合蜜芽五月| 国产99久久久国产精品~~牛 | 色偷偷88欧美精品久久久| 精品免费tv久久久久久久| 久久久久久久人妻无码中文字幕爆| 亚洲人成无码www久久久| 91精品国产综合久久香蕉| 97久久超碰国产精品旧版| 久久久精品2019免费观看| 亚洲AV无一区二区三区久久| 一本色道久久综合狠狠躁篇| 人妻少妇精品久久| 亚洲Av无码国产情品久久| 久久精品国产欧美日韩99热| 欧美午夜精品久久久久久浪潮| 久久综合九色综合精品| 国产精品一区二区久久精品无码 |