UNIX系統(tǒng)中的大多數(shù)文件I/O只需要用到5個函數(shù):open,read,write,lseek以及close
文件描述符 文件描述符是一個非負(fù)整數(shù),所有打開的文件都通過文件描述符引用 文件描述符的變化范圍是0-OPEN_MAX,OPEN_MAX是每個進(jìn)程最多打開的文件
1、open函數(shù)
#include<fcntl.h>
int open(const char* pathname,
int flag,
mode_t mode
); ?//若成功則返回文件描述符,若出錯則返回-1
flag打開方式有3種:O_RDONLY?只讀打開
? ??O_WRONLY 只寫打開 ?
?O_RDWR 讀、寫打開
這三個是互斥的,不可以同時使用,以下常量是選用的:
O_APPEND????? 每次寫操作都寫入文件的末尾
O_CREAT??????? 如果指定文件不存在,則創(chuàng)建這個文件
O_EXCL???????? 如果要創(chuàng)建的文件已存在,則返回 -1,并且修改errno的值
O_TRUNC??????? 如果文件存在,并且以只寫/讀寫方式打開,則清空文件全部內(nèi)容
O_NOCTTY?????? 如果路徑名指向終端設(shè)備,不要把這個設(shè)備用作控制終端。
O_NONBLOCK???? 如果路徑名指向 FIFO/塊文件/字符文件,則把文件的打開和后繼 I/O,設(shè)置為非阻塞模式(nonblocking mode)
大多數(shù)實(shí)現(xiàn)將O_RDONLY定義為0,O_WRONLY定義為1,O_RDWR定義為2
mode參數(shù)只有創(chuàng)建新文件時才使用,用來設(shè)置文件訪問權(quán)限的初始值。
S_IRUSR,S_IWUSER,S_IXUSR,S_IRGRP,S_IWGRP,S_IXGRP,S_IROTH,S_IWOTH,S_IXOTH.其中R:讀,W:寫,X:執(zhí)行,USR:文件所屬的用戶,GRP:文件所屬的組,OTH:其他用戶。
?
2、create函數(shù)
#include <fcntl.h>
int create(const char* pathname,
mode_t mode
);? //若成功則返回為只寫打開的文件描述符,若出錯則返回-1
等效于open(pathname,O_WRONLY | O_CREATE | O|TRUNC,mode);
create的不足:它以只寫方式打開所創(chuàng)建的文件,當(dāng)需要先寫文件,然后讀該文件時,可以用open代替,如:
open(pathname,O_RDWR | O_CREATE | O_TRUNC,mode);
?
3、read函數(shù)
#include <unistd.h>
ssize_t read(int fd, ?//文件描述符
????? void *buf,?? ?//要寫入內(nèi)核對象的數(shù)據(jù)
????? size_t size? ?//空間大小 ?????
); ?//若成功則返回讀到的字節(jié)數(shù),若已到文件結(jié)尾則返回0,若出錯返回-1
?
4、write函數(shù)
#include <unistd.h>
sszie_t write( int fd,?? //文件描述符
? ? ? ? const void *buf,?? ? ?//要寫入內(nèi)核對象的數(shù)據(jù)
size_t size? ?//寫入數(shù)據(jù)大小 ??????
);? ?//若成功則返回已寫的字節(jié)數(shù),若出錯則返回-1
?
5、lseek函數(shù)
lseek為一個打開的文件設(shè)置其偏移量
#include <unistd.h>
off_t lseek(int fd,? //定位文件描述符號
????? off_t offset, ? ?//定位位置
????? int whence? ?//定位參照點(diǎn):文件開始位置/文件結(jié)束位置/文件當(dāng)前位置
????? );?? //若成功則返回新的文件偏移量,若出錯則返回-1
參數(shù)whence:SEEK_SET:該文件的偏移量為文件開始位置offset個字節(jié) ???
SEEK_CUR:當(dāng)前位置加offset
? ???? SEEK_END:文件結(jié)束位置加offset
?
6、close函數(shù)
#include <unistd.h>
int close(int fd);? ?//若成功則返回0,若出錯則返回-1
關(guān)閉一個文件時還會釋放該進(jìn)程加在該文件上的所有記錄鎖,當(dāng)一個進(jìn)程終止時,內(nèi)核自動關(guān)閉它所有打開的文件
?
?
?
?
?
?
?
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
