亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

APUE學習筆記-文件I/O

2024-06-28 13:21:13
字體:
來源:轉載
供稿:網友
APUE學習筆記-文件I/O

  這次回顧APUE中第三四章的內容,主要是文件I/O操作相關的接口函數。

  UNIX系統的文件I/O是不帶緩沖的I/O,不帶緩沖是指每個read和write都調用系統內核的一個系統調用。

1.文件描述符

  UNIX I/O的所有函數都是基于文件描述符來操作的。那什么是文件描述符呢?文件描述符是一個非負整數。當打開一個現有文件或創建一個新文件時,內核向進程返回一個文件描述符。該文件描述符fd是所有UNIX I/O函數的操作對象。UNIX系統把文件描述符0與進程標準輸入關聯,把文件描述符1與進程標準輸出關聯,把文件描述符2與標準錯誤關聯。我們一般在程序中用STDINPUT_FILENO,STDOUTPUT_FILENO,STDERR_FILENO代替這幾個文件描述符。文件描述符的范圍是0~OPEN_MAX-1。

2.基本I/O函數

#include <fcntl.h>

int open(const char *path,int oflag,.../* mode_t mode */);  /* xx */

int openat(int fd,const char *path,int oflag,.../* mode_t mode */);

【成功返回文件描述符,出錯返回-1】

  調用open函數打開一個文件,path是要打開或創建的文件的名字,oflag用來說明該函數的多個選項。對于openat函數,在UNIX這一系列I/O函數中有很多類似openat帶at后綴的xxat函數,它們的功能與xx函數類似,只不過是xx函數是用文件的絕對路徑名來調用,而xxat函數是用文件描述符加上相對路徑名來調用,對xxat類函數來說,當path參數指向一個絕對路徑名時,其參數fd也失效,此時xxat函數與xx函數相同。(再后面對于這種函數我會用xx注釋說明,就不再列出xxat函數了)。

  open函數的oflag參數是用多個系統定義的常量做‘或’運算得出。首先是O_RDONLY,O_WRONLY,O_RDWR,O_EXEC,O_SEARCH(這五個常量中必須指定一個且只能指定一個)。剩下的我只列出幾個我覺得用的頻繁些的:O_APPEND,每次寫時都追加到文件末尾;O_CREAT,若此文件不存在則創建,使用該選項時,函數第三個參數mode需指定文件訪問權限;O_TRUNC,若文件存在,且是只寫或讀-寫打開,則將文件長度截斷為零。

#include <fcntl.h>

int creat(const char *path,mode_t mode);

【成功,返回以WRONLY打開的文件描述符;出錯返回-1】

#include <unistd.h>

int close(int fd);【成功,返回0;出錯返回-1】

注:當一個進程終止時,內核會自動關閉它打開的所有文件,因此很多程序都利用這一點不顯式調用close關閉。

off_t lseek(int fd,off_t offset,int whence);【成功,返回文件新的偏移量;失敗返回-1】

whence有三種值:SEEK_SET,此時文件偏移量設置為據文件開始初offset個字節處;SEEK_CUR,此時將文件偏移量設置為其當前值加offset;SEEK_END,此時文件偏移量設置為文件長度加offset。

ssize_t read(int fd,void *buf,size_t nbytes);【成功,返回讀到字節數,若已到文件尾,返回零;出錯返回-1】

從文件描述符所指文件讀n字節到buf數組。ssize_t是帶符號返回值int,size_t是unsigned int

ssize_t write(int fd,void *buf,size_t nbytes);【成功,返回已寫字節數;出錯返回-1】

從buf數組讀n字節寫入fd所指文件。對普通文件,寫操作從文件當前偏移量出開始;對于文件打開時指定了O_APPEND位,每次寫操作是在文件末尾。

3.文件共享

  UNIX支持在不同進程間共享打開文件。UNIX內核表示打開文件的數據結構如下所示(手機拍的湊合著看):

a.每個進程在進程表中都有一個記錄項,記錄項包含一張打開文件的文件描述符表,表中每一項關聯文件描述符標志及一個指向文件表項的指針。

b.內核為所有打開文件維持一張文件表,每個表項包含文件狀態標志,當前文件偏移量,v節點指針。

c.每個打開文件都有一個v節點結構。v節點包含了文件類型和對文件進行各種操作的函數指針。還包含了文件的i節點,i節點包含了文件的所有者,文件長度,指向文件實際數據塊在磁盤上的指針等信息。

  兩獨立進程各自打開同一文件的示意圖:

#include <unistd.h>

int dup(int fd);【成功,返回新文件描述符,出錯返回-1】

復制現有文件描述符,返回的文件描述符是當前可用的文件描述符中最小的那個。

int fsync(int fd);

int fdatasync(int fd);

【成功,返回0,出錯返回-1】

void sync(void);

sync只是將所修改的塊緩沖區加入寫隊列,然后就返回,不等待寫磁盤操作解數。

fsync只對文件描述符fd指定的文件有用,且要等寫磁盤操作完成才返回。

fdatasync類似于fsync,只是fdatasync只影響文件數據部分。

#include <fcntl.h>

int fcntl(int fd,int cmd,.../* arg */);

該函數用于改變已打開文件的屬性。fcntl的功能與cmd有關。

To be continued...


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人h视频在线观看播放| 亚洲区一区二区| 午夜免费日韩视频| 久久精品99久久香蕉国产色戒| 国产综合在线视频| 91欧美视频网站| 国产一区二区三区中文| 久久久久久久爱| 国产成人精品视| 色999日韩欧美国产| 97国产一区二区精品久久呦| 日韩电视剧免费观看网站| 中文综合在线观看| 中文字幕精品视频| 成人黄色av网| 色香阁99久久精品久久久| 欧美性受xxxx黑人猛交| 久久99视频精品| 欧美—级a级欧美特级ar全黄| 欧美理论电影网| 日韩av网站大全| 日韩电影视频免费| 超薄丝袜一区二区| 国产suv精品一区二区| 91社影院在线观看| 中文国产成人精品久久一| 欧美日韩在线视频观看| 成人黄色免费在线观看| 高清在线视频日韩欧美| 久久久久日韩精品久久久男男| 欧美性色视频在线| 欧美国产日产韩国视频| 欧美成人精品不卡视频在线观看| 一区二区三区视频免费| 国产91精品网站| 成人亚洲欧美一区二区三区| 精品自在线视频| 2019最新中文字幕| 中文字幕日韩在线播放| 91久久综合亚洲鲁鲁五月天| 亚洲成年人在线播放| 91人成网站www| 国产亚洲欧美aaaa| 久久精品中文字幕免费mv| 麻豆国产va免费精品高清在线| 日韩毛片中文字幕| 久久99久国产精品黄毛片入口| 日韩av毛片网| 国产精品久久久一区| 亚洲第一精品夜夜躁人人爽| 国产91久久婷婷一区二区| 亚洲美腿欧美激情另类| 日韩欧美精品网站| 欧美日韩综合视频| 国产成人精品午夜| 欧美激情一区二区久久久| 永久555www成人免费| 7m第一福利500精品视频| 亚洲最大福利网| 国产女人精品视频| 欧美激情一区二区三区高清视频| 色哟哟亚洲精品一区二区| 色妞在线综合亚洲欧美| 精品亚洲国产成av人片传媒| 日韩av手机在线| 欧美极品少妇xxxxⅹ喷水| 美女扒开尿口让男人操亚洲视频网站| 久久成人一区二区| 国产在线视频91| 精品国产一区二区三区久久狼黑人| 91国内在线视频| 亚洲人成伊人成综合网久久久| 91夜夜揉人人捏人人添红杏| 91成人在线观看国产| 亚洲美女喷白浆| 亚洲精品美女久久| 日韩成人中文字幕在线观看| 色综合久综合久久综合久鬼88| 国产精品一区二区三区在线播放| 一区二区欧美久久| 欧美日韩成人网| 欧美激情视频一区二区三区不卡| 黄网站色欧美视频| 色综合久久久久久中文网| 成人免费大片黄在线播放| 亚洲黄色av女优在线观看| 国产在线观看精品| 伊人伊成久久人综合网小说| 57pao成人国产永久免费| 成人字幕网zmw| 欧美日韩视频免费播放| 91精品在线观看视频| 精品成人69xx.xyz| 日韩在线视频中文字幕| 国产精品主播视频| 亚洲天堂2020| 日韩av在线免费观看一区| 中文字幕欧美精品日韩中文字幕| 国产精品视频一区二区三区四| 亚洲free嫩bbb| 97香蕉超级碰碰久久免费的优势| 日韩电影免费观看在线| 亚洲摸下面视频| 国产精品日韩在线播放| 精品福利一区二区| 久久精品在线播放| 国产日韩精品入口| 国内精品模特av私拍在线观看| 久久久精品国产网站| 成人黄色av播放免费| 国产日韩欧美夫妻视频在线观看| 亚洲一区二区精品| 国产精品自产拍在线观看中文| 亚洲aⅴ日韩av电影在线观看| 欧美精品久久久久久久| 亚洲a区在线视频| 97久久精品人人澡人人爽缅北| 亚洲女人被黑人巨大进入| 久久精品一偷一偷国产| 美日韩丰满少妇在线观看| 亚洲电影免费在线观看| 成人做爰www免费看视频网站| 中文字幕亚洲综合久久| 久久精品国产久精国产思思| 欧美日本国产在线| 91精品国产91| 亚洲视频axxx| 亚洲综合小说区| 奇米影视亚洲狠狠色| 久久精品中文字幕电影| 亚洲xxx大片| 精品久久久中文| 97在线精品视频| 久久天天躁狠狠躁夜夜躁2014| 日韩视频永久免费观看| 亚洲视频在线观看视频| 日本成人黄色片| 久久久久久久久中文字幕| 国产精品久久久久久久久久ktv| 九九九久久久久久| 久久久国产在线视频| 亚洲精品国产拍免费91在线| 伦伦影院午夜日韩欧美限制| 在线观看国产精品日韩av| 欧美激情国内偷拍| 亚洲精品网址在线观看| 亚洲精品中文字幕av| 亚洲大尺度美女在线| 成人精品一区二区三区电影黑人| 亚洲精品国产拍免费91在线| 亚洲全黄一级网站| 日韩av免费看网站| 韩国福利视频一区| 正在播放亚洲1区| 日韩hd视频在线观看| 国产精品第10页| 91免费在线视频网站| 永久免费毛片在线播放不卡| 尤物精品国产第一福利三区| 精品亚洲va在线va天堂资源站| 亚洲美女性视频| 欧美激情中文字幕乱码免费| 欧美激情一区二区三级高清视频| 国产精品久久久91|