• <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)論排行榜

            国产精品久久新婚兰兰| 久久夜色精品国产亚洲| 最新久久免费视频| 漂亮人妻被中出中文字幕久久| 久久精品日日躁夜夜躁欧美| 久久久久99精品成人片欧美| 久久久久99精品成人片| 狠狠综合久久AV一区二区三区 | 日本国产精品久久| 中文字幕无码久久人妻| 国产精品一区二区久久国产| 久久精品二区| 久久av无码专区亚洲av桃花岛| 蜜桃麻豆www久久| 久久久一本精品99久久精品88| 国产99久久九九精品无码| 一本色道久久88—综合亚洲精品| 亚洲一本综合久久| 久久人人爽人人爽人人AV | 国内精品人妻无码久久久影院导航| 国产99精品久久| 97精品依人久久久大香线蕉97| 狠狠色综合久久久久尤物| 精品久久久久久亚洲| 无码AV中文字幕久久专区| 中文字幕精品无码久久久久久3D日动漫 | AV狠狠色丁香婷婷综合久久| 久久中文字幕精品| 欧美色综合久久久久久| 精品一久久香蕉国产线看播放| 一本大道加勒比久久综合| 久久无码人妻一区二区三区| 亚洲精品无码成人片久久| 亚洲欧洲久久久精品| 开心久久婷婷综合中文字幕| 久久精品国产WWW456C0M| 99久久精品国产毛片| 久久国产三级无码一区二区| 国内精品欧美久久精品| 久久WWW免费人成—看片| 青春久久|