訪問文件之系統調用以及庫函數訪問

linux系統中,所有打開的文件都對應一個文件描述符,本身是一個非負整數,0-19,so允許每個進程最多能打開20個文件,現在絕大多數的能打開1024個

編程總結:

(1)main(int argc,char*argv[])//argc是整型,表示實際參數的個數。argv表示字符出指針數據

(2)(fd=open(argv[1],O_CREAT|O_RDWR,0755))<0

//如果flag參數裏有O_CREAT表示,該文件如果不存在,系統則會創建該文件,該文件的權限由第三個參數決定,此處爲0755
//如果flah參數裏沒有O_CREAT參數,則第三個參數不起作用.此時,如果要打開的文件不存在,則會報錯.
//所以fd=open(argv[1],O_RDWR),僅僅只是打開指定文件

一系統調用系列

創建
int creat(const char *filename,mode_t mode)
                        名      模式
S_IXUSR  可執行     -》1
S_IWUSR  可寫       -》2 
S_IRUSR  可讀       -》4 
S_IRWXU  可讀,可寫,可執行-》7
3
755
文件所有者
文件所有者
4
系統調用打開
int open(const char *pathname,int flags)
int open(const char *pathname,intflags,mode_t mode)
pathname 要打開的文件名(包含路徑,缺省爲當前路徑)
flags:打開標誌

./file_open hello//打開hello文件,當前目錄下沒有會自動創建
5
系統調用-關閉
int close(int fd)
6
系統調用-讀
int read(int fd,const void *buf,xize_t length)
從文件描述符fd所指定的文件中讀取length個字節到buf所指向的緩衝區中,返回爲實際讀取的字節數。
7
系統調用-定位
int lseek(int fd,offset_t offset,int whence)
將文件讀寫指針相對whence移動offset個字節。
lseek(fd,0,SEEK_END)返回值就是文件的長度

讀了四個字節,指針指到第四字節處,當讀4個字節,從指針所在位置開始讀四個字節(即5678

可通過lseek指定位置開是讀或者寫
8
int access(const char*pathname,int mode)
判斷文件是否可mode
R_OK文件可讀
W_OK文件可寫
X_OK文件可寫
F_OK文件存在

實例講分析

while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))

(1)bytes_read=-1;表示讀的時候出錯返回-1;

(2)bytes_read=BUFFER_SIZE;表示讀成功,且讀出了BUFFER_SIZE大小的內容

(3)bytes_read>0;表示只讀了一部分,繼續讀。

./file_cp s1 s2//把s1裏的內容讀出寫到s2裏

 

二庫函數訪問文件系列

1
庫函數-創建和打開
FILE *fopen(const char *filename,const char *mode)
r,rb只讀方式打開
w,wb只寫方式打開,如果文件不存在,則創建該文件
2
在dos、Windows系統中b用於區分二進制文件和文本文件
Linux不區分二進制文件和文本文件
3
庫函數-讀
size_t fread(void *ptr,size_t size,size_t n,FILE*stream)
從stream 指向的文件讀取N個字段,每個字段爲size字節,並將讀取的數據放入ptr所指的字符數組中,返回實際已讀取的字節數。
4
庫函數-寫
size_t fwrite(const void *ptr,size_t size,size_t n,FILE*stream)
5
庫函數-格式化讀
fscanf(FILE*stream,char *format[])
fscanf(stdin,“%d”,&i)
從標準輸入stdin讀取整型,到地址爲i處
6
庫函數-格式化寫
fprintf(stream,"%s%c",s,c)
以指定的格式從stream中寫到s,c文件裏去
7
庫函數-定位
int fseek(FILE *stream,long offset,int whence)
文件描述類型 stream,相對基地址whence,偏移offset
8
路徑獲取
char*getcwd(char*buffer,size_t size)
會把當前的路徑名copy到buffer中。
9
創建目錄
int mkdir(char *dir,int mode)

實例分析

./file_creat creat//當前目錄下沒有creat文件,so建立並附屬性。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章