国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

Linux/Unix中系統(tǒng)級IO

2024-06-28 13:21:26
字體:
供稿:網(wǎng)友
linux/Unix中系統(tǒng)級IO

Linux/unixI/O:將設(shè)備映射為文件的方式,允許Unix內(nèi)核引出一個簡單、低級的應(yīng)用接口。

Linux/unix IO的系統(tǒng)調(diào)用函數(shù)很簡單,它只有5個函數(shù):open(打開)、close(關(guān)閉)、read(讀)、write(寫)、lseek(定位)。但是系統(tǒng)IO調(diào)用開銷比較大,一般不會直接調(diào)用,而是通過調(diào)用Rio包進行健壯地讀和寫,或者調(diào)用C語言的標準I/O進行讀寫。盡管如此,Rio包和標準IO也都是封裝了unix I/O的,所以學(xué)習系統(tǒng)IO的調(diào)用才能更好地理解高級IO的原理。

1、打開文件返回一個小的非負整數(shù),即描述符。用描述符來標識文件。每個進程都有三個打開的文件:標準輸入(0)、標準輸出(1)、標準錯誤(2)

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(char *filename, int flags, mode_t mode);        //返回:若成功則為新文件描述符,若出錯為-1

flags:進程打算如何訪問文件

O_RDONLY:只讀O_WRONLY:只寫O_RDWR:可讀可寫

也可以是一個或更多位掩碼的或:

O_CREAT:如文件不存在,則創(chuàng)建

O_TRUNC:如果文件已存在,則截斷

O_APPEND:每次寫操作,設(shè)置k到文件結(jié)尾

mode:指定新文件的訪問權(quán)限位

每個進程都有一個umask,通過調(diào)用umask函數(shù)設(shè)置。所以文件的權(quán)限為被設(shè)置成mode&~umask

2、改變當前文件位置從文件開頭起始的字節(jié)偏移量。系統(tǒng)內(nèi)核保持一個文件位置k,對于每個打開的文件,起始值為0。應(yīng)用程序執(zhí)行seek,設(shè)置當前位置k,通過調(diào)用lseek函數(shù),顯示地修改當前文件位置。

3、讀寫文件。讀操作:從文件拷貝n個字節(jié)到存儲器,從當前文件位置k開始,將k增加到k+n,對于一個大小為m字節(jié)的文件,當k>=m時,讀操作觸發(fā)一個EOF的條件。寫操作:從存儲器拷貝n個字節(jié)到文件,k更新為k+n

#include <unistd.h>ssize_t read(int fd, void *buf, size_t n);            //返回:若成功則為讀的字節(jié)數(shù),若EOF則為0,若出錯為-1.ssize_t write(int fd, const void *buf, size_t n);            //返回:若成功則為寫的字節(jié)數(shù),若出錯則為-1.

read函數(shù):從描述符為fd的當前文件位置拷貝至多n個字節(jié)到存儲器位置buf。返回-1表示一個錯誤,返回0表示EOF,否則返回實際讀取的字節(jié)數(shù)。

write函數(shù):從存儲器位置buf拷貝至多n個字節(jié)到描述符fd的當前文件位置。

Ps:ssize_t與size_t區(qū)別:size_t:unsignedint,ssized_t:int。

4、關(guān)閉文件:內(nèi)核釋放文件打開時創(chuàng)建的數(shù)據(jù)結(jié)構(gòu),并恢復(fù)描述符到描述符池中,進程通過調(diào)用close函數(shù)關(guān)閉一個打開的文件。關(guān)閉一個已關(guān)閉的描述符會出錯。

#include <unistd.h>int close(int fd);                //返回:若成功則為0,若出錯則為-1.


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南乐县| 从化市| 峨眉山市| 梅州市| 田林县| 长泰县| 阳高县| 万山特区| 江油市| 南江县| 白银市| 延寿县| 东平县| 本溪市| 延庆县| 辛集市| 仙桃市| 甘南县| 宜良县| 宁武县| 庐江县| 汉源县| 昌平区| 当涂县| 凤翔县| 社会| 汉川市| 榆林市| 香格里拉县| 敖汉旗| 阿拉尔市| 汉川市| 定安县| 宁津县| 都安| 故城县| 博客| 和林格尔县| 中方县| 关岭| 平湖市|