• <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>
            posts - 297,  comments - 15,  trackbacks - 0
            Linux下對(duì)文件操作有兩種方式:系統(tǒng)調(diào)用(system call)和庫函數(shù)調(diào)用(Library functions)。可以參考《Linux程序設(shè)計(jì)》(英文原版為《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。

            1。系統(tǒng)調(diào)用
            系統(tǒng)調(diào)用提供的函數(shù)如open, close, read, write, ioctl等,需包含頭文件unistd.h。以write為例:其函數(shù)原型為 size_t write(int fd, const void *buf, size_t nbytes),其操作對(duì)象為文件描述符或文件句柄fd(file descriptor),要想寫一個(gè)文件,必須先以可寫權(quán)限用open系統(tǒng)調(diào)用打開一個(gè)文件,獲得所打開文件的fd,例如 fd=open(\"/dev/video\", O_RDWR)。fd是一個(gè)整型值,每新打開一個(gè)文件,所獲得的fd為當(dāng)前最大fd加1。Linux系統(tǒng)默認(rèn)分配了3個(gè)文件描述符 值:0-standard input,1-standard output,2-standard error。
            系統(tǒng)調(diào)用通常用于底層文件訪問(low-level file access),例如在驅(qū)動(dòng)程序中對(duì)設(shè)備文件的直接訪問。
            系統(tǒng)調(diào)用是操作系統(tǒng)相關(guān)的,因此一般沒有跨操作系統(tǒng)的可移植性。
            系統(tǒng)調(diào)用發(fā)生在內(nèi)核空間,因此如果在用戶空間的一般應(yīng)用程序中使用系統(tǒng)調(diào)用來進(jìn)行文件操作,會(huì)有用戶空間到內(nèi)核空間切換的開銷。事實(shí)上,即使在用戶空間使 用庫函數(shù)來對(duì)文件進(jìn)行操作,因?yàn)槲募偸谴嬖谟诖鎯?chǔ)介質(zhì)上,因此不管是讀寫操作,都是對(duì)硬件(存儲(chǔ)器)的操作,都必然會(huì)引起系統(tǒng)調(diào)用。也就是說,庫函數(shù)對(duì) 文件的操作實(shí)際上是通過系統(tǒng)調(diào)用來實(shí)現(xiàn)的。例如C庫函數(shù)fwrite()就是通過write()系統(tǒng)調(diào)用來實(shí)現(xiàn)的。
            這樣的話,使用庫函數(shù)也有系統(tǒng)調(diào)用的開銷,為什么不直接使用系統(tǒng)調(diào)用呢?這是因?yàn)椋x寫文件通常是大量的數(shù)據(jù)(這種大量是相對(duì)于底層驅(qū)動(dòng)的系統(tǒng)調(diào)用所實(shí)現(xiàn) 的數(shù)據(jù)操作單位而言),這時(shí),使用庫函數(shù)就可以大大減少系統(tǒng)調(diào)用的次數(shù)。這一結(jié)果又緣于緩沖區(qū)技術(shù)。在用戶空間和內(nèi)核空間,對(duì)文件操作都使用了緩沖區(qū),例 如用fwrite寫文件,都是先將內(nèi)容寫到用戶空間緩沖區(qū),當(dāng)用戶空間緩沖區(qū)滿或者寫操作結(jié)束時(shí),才將用戶緩沖區(qū)的內(nèi)容寫到內(nèi)核緩沖區(qū),同樣的道理,當(dāng)內(nèi) 核緩沖區(qū)滿或?qū)懡Y(jié)束時(shí)才將內(nèi)核緩沖區(qū)內(nèi)容寫到文件對(duì)應(yīng)的硬件媒介。

            2。庫函數(shù)調(diào)用
            標(biāo)準(zhǔn)C庫函數(shù)提供的文件操作函數(shù)如fopen, fread, fwrite, fclose, fflush, fseek等,需包含頭文件stdio.h。以fwrite為例,其函數(shù)原型為size_t fwrite(const void *buffer, size_t size, size_t item_num, FILE *pf),其操作對(duì)象為文件指針FILE *pf,要想寫一個(gè)文件,必須先以可寫權(quán)限用fopen函數(shù)打開一個(gè)文件,獲得所打開文件的FILE結(jié)構(gòu)指針pf,例如 pf=fopen(\"~/proj/filename\", \"w\")。實(shí)際上,由于庫函數(shù)對(duì)文件的操作最終是通過系統(tǒng)調(diào)用實(shí)現(xiàn)的,因此,每打開一個(gè)文件所獲得的FILE結(jié)構(gòu)指針都有一個(gè)內(nèi)核空間的文件描述符 fd與之對(duì)應(yīng)。同樣有相應(yīng)的預(yù)定義的FILE指針:stdin-standard input,stdout-standard output,stderr-standard error。
            庫函數(shù)調(diào)用通常用于應(yīng)用程序中對(duì)一般文件的訪問。
            庫函數(shù)調(diào)用是系統(tǒng)無關(guān)的,因此可移植性好。
            由于庫函數(shù)調(diào)用是基于C庫的,因此也就不可能用于內(nèi)核空間的驅(qū)動(dòng)程序中對(duì)設(shè)備的操作.

            from:
            http://blog.c114.net/html/07/206807-17143.html
            http://blog.chinaunix.net/u3/94284/showart_1898811.html

            posted on 2010-03-01 22:03 chatler 閱讀(519) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
            <2009年12月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久久无码精品亚洲日韩京东传媒 | 国产精品欧美久久久久无广告 | 亚洲AV无码久久精品色欲| 久久久WWW免费人成精品| 色综合久久无码五十路人妻| 久久综合给久久狠狠97色| 91久久福利国产成人精品| 久久免费视频一区| 久久久久亚洲av无码专区喷水| 国产欧美久久久精品| 久久一区二区免费播放| 久久丫精品国产亚洲av| 91久久精品国产成人久久| 亚洲&#228;v永久无码精品天堂久久| 国产精品99久久久久久宅男小说| 久久综合狠狠综合久久| 久久久久亚洲AV综合波多野结衣| 影音先锋女人AV鲁色资源网久久 | 无码任你躁久久久久久久| 亚洲国产精品无码成人片久久| 一级做a爱片久久毛片| 久久香蕉国产线看观看精品yw | 久久久久免费精品国产| 久久99精品九九九久久婷婷| 久久精品中文字幕无码绿巨人| 韩国三级中文字幕hd久久精品| 亚洲AV无码成人网站久久精品大| 亚洲国产精品婷婷久久| 久久久久人妻精品一区三寸蜜桃| 97久久精品人妻人人搡人人玩| 亚洲中文字幕无码久久综合网| 亚洲国产精品狼友中文久久久| 国产福利电影一区二区三区久久久久成人精品综合| 亚洲国产精品嫩草影院久久| 伊人色综合久久天天| 久久综合久久久| 亚洲国产精品久久久久网站| 国产精品综合久久第一页| 亚洲人成网亚洲欧洲无码久久| 久久这里都是精品| 波多野结衣久久一区二区 |