青浦網(wǎng)絡(luò)公司網(wǎng)站官方推廣平臺(tái)
目錄
1.概述
2.open的介紹
3.write 的介紹
4.read
5.close的介紹
6.文件描述符
1.概述
C語(yǔ)言操作文件的幾個(gè)庫(kù)函數(shù):fopen,fread,fwrite,fclose; 系統(tǒng)調(diào)用:open,read,write,close; 系統(tǒng)調(diào)用方法實(shí)現(xiàn)在內(nèi)核中;(陷入內(nèi)核,切換到內(nèi)核)
2.open的介紹
open重載:兩個(gè)參數(shù)用于打開一個(gè)已經(jīng)存在的文件;三個(gè)參數(shù)的用于新建一個(gè)文件,并設(shè)置訪問(wèn)權(quán)限;
pathname:文件和路徑和名稱;
flags:文件的打開方式;
mode:文件的權(quán)限,如"0600";
了解特殊權(quán)限:linux系統(tǒng)中,文件的三種特殊權(quán)限_rwsr是什么權(quán)限-CSDN博客
關(guān)于linux權(quán)限s權(quán)限和t權(quán)限詳解_目錄權(quán)限t_D_R_L_T的博客-CSDN博客
open的返回值為int,稱為文件描述符;
flags的打開標(biāo)志,如:
O_WRONLY:只寫打開;
O_RDONLY:只讀打開;
O_RDWR:讀寫方式打開;
O_CREAT:文件不存在則創(chuàng)建;
O_APPEND:文件末尾追加;
O_TRUNC:清空文件,重新寫入;
open的返回值是int,稱之為"文件描述符";每打開一個(gè)文件,我們就會(huì)得到一個(gè)文件描述符,這個(gè)文件描述符是一個(gè)整型,通過(guò)文件描述符就可以對(duì)文件進(jìn)行讀寫這樣的操作.open失敗返回-1,成功返回一個(gè)大于等于0的值; ?0,1,2是默認(rèn)打開的;
0:標(biāo)準(zhǔn)輸入
1:標(biāo)準(zhǔn)輸出
2:標(biāo)準(zhǔn)錯(cuò)誤輸出
3.write 的介紹
fd:對(duì)應(yīng)打開的文件描述符
buf:寫入的文件內(nèi)容;
count:要寫入多少個(gè)字節(jié);
返回值:ssize_t:實(shí)際寫入了多少個(gè)字節(jié);
4.read
fd:對(duì)應(yīng)打開的文件描述符;
buf:把文件內(nèi)容讀取到一塊空間buf中;
count:期望要讀取的字節(jié)數(shù); 返回值:
ssize_t:實(shí)際讀取了多少個(gè)字節(jié);
5.close的介紹
關(guān)閉文件描述符;
6.文件描述符
文件打開以后,內(nèi)核給文件的一個(gè)編號(hào);(>0的整數(shù))
0:標(biāo)準(zhǔn)輸入;
1:標(biāo)準(zhǔn)輸出;
2:標(biāo)準(zhǔn)錯(cuò)誤輸出;
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{write(1,"hello",5);exit(0);
}
//往屏幕(標(biāo)準(zhǔn)輸出)寫入hello 5個(gè)字節(jié)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <assert.h>/*int main(){int fd=open("file.txt",O_WRONLY|O_CREAT,0600);//創(chuàng)建新的文件需定義其權(quán)限,3個(gè)參數(shù)assert(fd!=-1);printf("fd=%d\n",fd);//自定義文件標(biāo)識(shí)符fd為最小未被占用的一項(xiàng),系統(tǒng)已占用0 1 2write(fd,"hello",5);close(fd);exit(0);}*/int main(){int fd=open("file.txt",O_RDONLY);//文件已經(jīng)存在,不用定義權(quán)限assert(fd!=-1);char buff[128]={0};int n=read(fd,buff,127);printf("n=%d,buff=%s\n",n,buff);close(fd);exit(0);}
利用讀寫復(fù)制文件
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <assert.h>int main()
{int fr=open("file.txt",O_RDONLY);int fw=open("file2.txt",O_RDWR|O_CREAT,0600);assert(fr!=-1||fw!=-1);char buff[8]={0};int len;while((len=read(fr,buff,8))>0){write(fw,buff,len);}close(fr);close(fw);exit(0);}