青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0

文件IO編程

一、系統調用及API

1、  系統調用

所謂系統調用就是指操作系統提供給用戶程序調用的一組“特殊”接口,用戶程序可以通過這組“特殊”接口來獲得操作系統內核提供的服務,例如,用戶可以通過進程控制相關的系統調用來創建進程、實現進程調度、進程管理等

為了更好地保護內核空間(就是為什么用戶程序不能直接訪問系統內核提供的服務),將程序的運行分為內核空間和用戶空間,它們運行在不同的級別上,在邏輯上是相互隔離的。

2、  用戶編程接口(API

系統調用不是直接與程序員進行交互的,它僅僅是一個通過軟中斷機制向內核提交請求,以獲取內核服務的接口,實際使用中,程序員調用的通常是API函數,API遵循了在UNIX中最流行的應用編程界面標準——POSIX標準。該標準描述了操作系統的系統調用編程接口(實際上就是API),用于保證應用程序可以在源代碼一級上在多種操作系統上移植運行,這些系統調用接口主要是通過C庫來實現的。

3、  系統命令

系統命令相對API更高了一層,實際上是一個可執行程序(如shell系統命令),它的內部引用了用戶編程接口(API)來實現相應的功能。

 

二、文件及文件描述符

linux中對目錄和設備的操作都等同于文件的操作,linux中文件分為普通文件、目錄文件、鏈接文件、設備文件四種

內 核通過文件描述符區分和引用特定的文件,所有設備和文件的操作都使用文件描述符來進行的,它是一個非負的整數,是一個索引值,并指向內核中每個進程打開文 件的記錄表,當打開一個現存文件或創建一個新文件時,內核就向進程返回一個文件描述符,當需要讀文件時,也需要把文件描述符作為參數傳遞給相應的函數。

通常,一個進程打開時,都會打開3個文件:標準輸入、標準輸出、和標準出錯處理,這3個文件分別對應文件描述符為012

三、不帶緩存的文件IO操作

不帶緩存是指每一個函數都只是調用系統中的一個函數,這些函數雖然不是ANSI C的組成部分,但都是POSIX的組成部分。

主要用到5個函數:openreadwritecloselseek

Open函數定義:

定義函數 int open( const char * pathname, int flags);
int open( const char * pathname,int flags, int mode);

參數pathname 被打開的文件名(可包含路徑名)。

參數flags 所能使用的旗標:
O_RDONLY
以只讀方式打開文件

O_WRONLY 以只寫方式打開文件
O_RDWR 以可讀寫方式打開文件。上述三種旗標是互斥的,也就是不可同時使用,但可與下列的旗標利用OR(|)運算符組合。
O_CREAT 若欲打開的文件不存在則自動建立該文件。
O_EXCL 如果O_CREAT 也被設置,此指令會去檢查文件是否存在。文件若不存在則建立該文件,否則將導致打開文件錯誤。此外,若O_CREATO_EXCL同時設置,并且欲打開的文件為符號連接,則會打開文件失敗。
O_NOCTTY 如果欲打開的文件為終端機設備時,則不會將該終端機當成進程控制終端機。
O_TRUNC 若文件存在并且以可寫的方式打開時,此旗標會令文件長度清為0,而原來存于該文件的資料也會消失。
O_APPEND 當讀寫文件時會從文件尾開始移動,也就是所寫入的數據會以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻斷的方式打開文件,也就是無論有無數據讀取或等待,都會立即返回進程之中。
O_NDELAY O_NONBLOCK
O_SYNC 以同步的方式打開文件。
O_NOFOLLOW 如果參數pathname 所指的文件為一符號連接,則會令打開文件失敗。
O_DIRECTORY 如果參數pathname 所指的文件并非為一目錄,則會令打開文件失敗。

此為Linux2.2以后特有的旗標,以避免一些系統安全問題。參數mode 則有下列數種組合,只有在建立新文件時才會生效,此外真正建文件時的權限會受到umask值所影響,因此該文件權限應該為(mode-umaks)。
S_IRWXU00700 權限,代表該文件所有者具有可讀、可寫及可執行的權限。
S_IRUSR S_IREAD00400權限,代表該文件所有者具有可讀取的權限。
S_IWUSR S_IWRITE00200 權限,代表該文件所有者具有可寫入的權限。
S_IXUSR S_IEXEC00100 權限,代表該文件所有者具有可執行的權限。
S_IRWXG 00070權限,代表該文件用戶組具有可讀、可寫及可執行的權限。
S_IRGRP 00040 權限,代表該文件用戶組具有可讀的權限。
S_IWGRP 00020權限,代表該文件用戶組具有可寫入的權限。
S_IXGRP 00010 權限,代表該文件用戶組具有可執行的權限。
S_IRWXO 00007權限,代表其他用戶具有可讀、可寫及可執行的權限。
S_IROTH 00004 權限,代表其他用戶具有可讀的權限
S_IWOTH 00002權限,代表其他用戶具有可寫入的權限。
S_IXOTH 00001 權限,代表其他用戶具有可執行的權限。

返回值 若所有欲核查的權限都通過了檢查則返回0 值,表示成功,只要有一個權限被禁止則返回-1

錯誤代碼 EEXIST 參數pathname 所指的文件已存在,卻使用了O_CREATO_EXCL旗標。
EACCESS 參數pathname所指的文件不符合所要求測試的權限。
EROFS 欲測試寫入權限的文件存在于只讀文件系統內。
EFAULT 參數pathname指針超出可存取內存空間。
EINVAL 參數mode 不正確。
ENAMETOOLONG 參數pathname太長。
ENOTDIR 參數pathname不是目錄。
ENOMEM 核心內存不足。
ELOOP 參數pathname有過多符號連接問題。
EIO I/O 存取錯誤

如:

int dev_fd;//文件描述符,失敗返回為-1

dev_fd = open("/dev/simple",O_RDWR | O_NONBLOCK,0600);

//權限值可以不要

如果使用了O_CREATE標志,則使用的函數為int open( const char * pathname,int flags, int mode);此時就要指定mode,用來表示文件的訪問的權限,mode的組合表示如上所述。

除了可以用以上宏來進行“或”邏輯產生標志以外,我們還可以使用自己的數字來表示,linux總共用5個數字來表示文件的各種權限,第一位表示設置用戶的ID,第二位表示設置組ID,第三位表示用戶自己的權限位,第四位表示組的權限,第五位表示其他人的權限,每個數字可以取1(執行權限),2(寫權限),4(讀權限),0(無),或者這些值的組合。

     例如,如果要創建一個用戶可讀,可寫,可執行,但是組沒有權限,其他人可以讀,可以執行的文件,并設置用戶ID,那么使用的模式是1(設置用戶ID)、0(不設置用戶ID)、71+2+4,讀,寫,執行)、0(沒有權限)、51+4,讀,執行),即10705,如:

Open(“test”, O_CREATE10705

O_CREATE為標志的open函數實際上實現了文件創建的功能,因此下面的函數等同create()函數。

Int open(pathname, O_CREATE |O_WRONLY,mode);

 

注:open函數返回的文件描述符一定是最小的未用文件描述符。

 

Close函數定義:

Int closeint fd

fd:文件描述符,0為成功,-1為出錯

 

read函數定義:

read函數是用于將指定的文件描述符中讀出數據,當從終端設備中讀出數據時,通常一次最多讀一行。

函數原型:ssize_t read(int fd,void *buf,size_t count)

Buf:指定存儲器讀出數據的緩沖區

Count:指定讀出的字節數

函數返回值:

成功:讀到的字節數

0:已達到文件尾

-1:出錯

在讀普通文件時,若讀到要求的字節數之前已到達文件的結尾,則返回的字節數會小于希望讀出的字節數。

 

write函數定義:

函數是用于向打開的文件寫數據,寫操作從文件的當前位移量處開始,若磁盤已滿或超出該文件的長度,則write函數返回失敗。

函數原型:ssize_t write(int fd,void *buf,size_t count)

Buf:指定存儲器寫入數據的緩沖區

Count:指定讀出的字節數

函數返回值:

成功:已寫的字節數

-1:出錯

在寫普通文件時,寫操作從文件的當前位移處開始。

 

lseek函數定義:

函數是用于在指定的文件描述符中將文件指針定位到相應的位置。

函數原型:ssize_t lseek(int fd,off_t offset,int whence)

offset:偏移量,每一次讀寫操作所需要移動的距離,單位是字節的數量,可正可負(向前移,向后移)。

whenceSEEK_SET:當前位置為文件指針的位置,新位置為當前位置加上偏移量

SEEK_CUR:

SEEK_END: 當前位置為文件的結尾,新位置為偏移量的大小加上偏移量的大小

函數返回值:

成功:文件的當前位移

-1:出錯

Offset可取負值,即可將文件指針相對當前位置向前移動5個字節,lseek函數的返回值為文件指針相對于文件頭的位置。

from:
http://blog.chinaunix.net/u3/94284/showart_1892712.html
posted on 2010-03-01 21:28 chatler 閱讀(361) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

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

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲免费观看| 亚洲精品久久久久久一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美色图五月天| 欧美激情女人20p| 欧美日韩三级在线| 国产精一区二区三区| 国产亚洲成av人片在线观看桃| 亚洲美女中文字幕| 亚洲精品视频在线播放| 一区二区精品在线| 性感少妇一区| 美女精品视频一区| 欧美日韩一区二区三区高清| 国产精品中文在线| 亚洲精品乱码久久久久久蜜桃91| 亚洲天堂av电影| 久久久www成人免费毛片麻豆| 久久久成人精品| 欧美黄色影院| 日韩视频在线你懂得| 欧美一区二区三区日韩视频| 蜜臀av国产精品久久久久| 欧美日韩国产综合视频在线| 国产一区二区丝袜高跟鞋图片| 亚洲国产成人av好男人在线观看| 亚洲精品少妇| 亚洲综合日韩在线| 麻豆精品视频在线| 在线天堂一区av电影| 久久嫩草精品久久久久| 欧美性色综合| 亚洲国产日韩欧美| 久久se精品一区精品二区| 亚洲第一精品夜夜躁人人躁 | 欧美在线关看| 最新日韩中文字幕| 久久蜜桃精品| 国产精品一区二区三区四区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲欧美精品中文字幕在线| 久久久久久久综合色一本| 欧美激情欧美狂野欧美精品| 国产精品中文字幕欧美| 99精品国产在热久久婷婷| 久久人体大胆视频| 韩国在线一区| 亚洲网站视频福利| 亚洲福利免费| 久久久久一区二区三区四区| 国产精品一区二区在线观看网站| 亚洲精品美女在线| 美女露胸一区二区三区| 欧美一区三区二区在线观看| 国产精品r级在线| 亚洲精品免费网站| 女人香蕉久久**毛片精品| 欧美一区二区在线免费播放| 国产欧美欧美| 欧美午夜不卡影院在线观看完整版免费 | 午夜精品区一区二区三| 亚洲电影免费| 美日韩精品视频| 亚洲国产综合在线看不卡| 欧美不卡视频一区| 久久视频国产精品免费视频在线 | 亚洲神马久久| 欧美电影免费观看高清| 麻豆精品传媒视频| 欧美aa国产视频| 国产精品免费看久久久香蕉| 亚洲美女中文字幕| 亚洲国产一区二区三区在线播| 久久xxxx精品视频| 韩国福利一区| 久久中文久久字幕| 美国十次成人| 亚洲国产乱码最新视频| 亚洲高清不卡在线| 欧美视频在线观看 亚洲欧| 亚洲一区二区视频在线| 亚洲综合激情| 国内在线观看一区二区三区| 欧美电影免费观看高清完整版| 欧美福利视频在线观看| 亚洲小说欧美另类婷婷| 久久精品夜色噜噜亚洲aⅴ| 99pao成人国产永久免费视频| 欧美日韩一区二区国产| 亚洲小视频在线| 欧美伊人久久久久久久久影院 | 亚洲调教视频在线观看| 国产精品入口| 老司机午夜精品| 欧美精品一区二区三区蜜臀| 午夜精品久久久久久| 久久久久久久成人| 亚洲一区二区视频在线| 久久婷婷蜜乳一本欲蜜臀| 亚洲精品日韩综合观看成人91| 午夜亚洲视频| 亚洲一卡二卡三卡四卡五卡| 国产精品网曝门| 国产日韩精品视频一区| 久久免费国产精品1| 久久久999成人| 91久久国产综合久久蜜月精品| 亚洲欧洲一区二区三区| 国产日产欧美a一级在线| 亚洲国产小视频在线观看| 国产一区二区视频在线观看 | 欧美精品免费看| 亚洲网站在线播放| 久久久久国产精品一区二区| 久久久久久午夜| 亚洲视频 欧洲视频| 欧美一区二区精品| 亚洲最新色图| 久久久久久亚洲精品不卡4k岛国| 日韩一级黄色av| 久久婷婷影院| 欧美区视频在线观看| 久久久av水蜜桃| 国产精品欧美在线| 夜夜嗨av一区二区三区网页| 最新精品在线| 久久综合999| 久久综合久色欧美综合狠狠| 欧美日韩成人在线观看| 亚洲丁香婷深爱综合| 一区二区三区久久| 亚洲国产日韩欧美综合久久| 午夜精品理论片| 亚洲男人的天堂在线| 欧美日本精品| 亚洲精品视频在线| 亚洲午夜av电影| 欧美日韩一卡| 亚洲精品人人| 一区二区三区鲁丝不卡| 欧美日韩国产专区| 亚洲图中文字幕| 亚洲欧美日韩视频一区| 国产精品久久久久久久久免费| 亚洲视频一区在线观看| 欧美一区二区三区免费看 | 欧美一区二区黄色| 久久国产黑丝| 国产一区二区中文| 久久精品理论片| 免费亚洲一区二区| 亚洲毛片网站| 国产精品久久久99| 亚洲欧美国内爽妇网| 久久久免费观看视频| 亚洲电影免费观看高清完整版在线观看 | 亚洲国产二区| 亚洲一区免费| 国产一区二区三区高清| 一本久久a久久免费精品不卡| 99视频精品在线| 欧美午夜精品一区| 午夜欧美大尺度福利影院在线看| 久久亚洲美女| 亚洲日本在线视频观看| 欧美日韩在线亚洲一区蜜芽| 亚洲欧美日韩综合| 欧美岛国激情| 亚洲午夜在线| 亚洲一级高清| 久久综合五月天婷婷伊人| 亚洲片区在线| 欧美视频中文一区二区三区在线观看| 亚洲影院一区| 欧美国内亚洲| 亚洲欧美成人| 亚洲第一中文字幕| 国产精品草草| 久久久999| 亚洲天堂激情| 欧美黄色免费| 性欧美大战久久久久久久久| 亚洲电影免费观看高清完整版在线 | 国产亚洲精品v| 欧美日韩激情小视频| 亚久久调教视频| 亚洲日本va午夜在线影院| 欧美一区二区三区四区夜夜大片| 亚洲激情av在线| 国产一区二区三区日韩欧美| 欧美日韩精品欧美日韩精品一| 欧美在线你懂的| 99re视频这里只有精品| 欧美成人免费视频| 久久久久国产一区二区| 亚洲视频免费| 亚洲最新色图| 亚洲毛片在线观看.| 在线精品高清中文字幕| 国产色爱av资源综合区|