日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux应用程序之----文件操作

發布時間:2023/12/15 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux应用程序之----文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件操作

????文件操作有兩種方式,一種是利用Linux系統調用,它依賴于操作系統;另一種是利用C語言庫函數,它不依賴于操作系統,在所有操作系統下面都是一樣的。首先來看系統調用方式的文件操作。

????1:創建文件

????????????int?creat?(const?char*?pathname?,?mode_t?mode)?

1)?mode_t?解釋?:1?執行;2:可寫:4:可讀。

????2)若成功返回文件描述符,出錯返回-1

????2:打開文件

????????????????????int?open(const?char?*path,?int?access,?mode_t?mode)

1)?access?可取以下:

?????????O_RDONLY??????????????只讀打開??????

?????????O_WRONLY?????????????只寫打開?????????????

?????????O_RDWR?????????????????讀寫打開???

?????????O_APPEND?????????追加方式打開??????

?????????O_CREAT???????????創建方式

?????????O_NOBLOCK????????非阻塞方式

2)?int?mode?只在O_CREAT?模式下才需要設置。可用數字表示:1?執行;2:可寫:4:可讀。

3)?若成功返回文件描述符,出錯返回-1

????3:讀文件??

???????????????int??read(int?fd?,?const?void?*buffer,??size_t?length)

1)?fd?:?文件描述符,由creat以及open函數的返回值得到.

2)??*buffer?讀取字符后的存儲緩沖區

3)?length??一次讀取的字節數

4)?成功返回一次讀取的實際字節數,失敗返回-1

4:向文件寫入字符?

??????????int??write(int?fd?,?const?void?*buffer,??size_t?length)

5)?fd?:?文件描述符,由create以及open函數的返回值得到.

6)??*buffer?寫入字符的存儲緩沖區

7)?length??一次寫入的字節數

8)?成功返回一次讀取的實際字節數,失敗返回-1

????5:?關閉文件

?int?close?(fd)

6:文件定位

??????????int?lseek(int?fd?,?offset_t?offset?,?int?where)

where的取值如下:SEEK_SET?;?SEEK_CUR?;?SEEK_END三種。注意offset可以取負值,表示向前移動。操作成功后返回文件指針相對于文件頭的位置。利用這一點,可以很輕松的計算一個文件的大小。只需調用??lseek(fd?,?0?,?SEEK_END),如果調用成功,其返回的就是文件的大小。

7:訪問判斷

有時需要知道某個文件的屬性,就可以利用訪問判斷函數。其原型為:

??????????int?access(const?char*?pathname?,?int?mode)

mode的取值,R_OK(可讀)?,?W_OK(可寫)?,?X_OK?(可執行),?F_OK(文件存在)。并且這些條件可以組合使用。如果判斷的條件成立,那么返回0,否則只要有一個條件不符合,就返回-1.

下面介紹C語言庫函數方式對文件的操作。在此之前,首先得明白三點。1:c語言中的文件一般分為兩類(按存儲方式劃分)。一類是字符文件,一類是二進制的文件。(linux系統調用不區分這兩類文件)2:ANSI?C?標準中對文件的操作會首先在內存開辟一塊緩沖空間,如對文件進行讀操作,先把讀到的內容放到緩沖區,再從緩沖區送到程序數據區。反過來對文件的寫操作也是一樣的,先把寫的內容放到緩沖區區,等緩沖區滿以后,在一起寫入到文件中去。3:FILE?指針,應該是C語言為每一個打開的文件都設計的一個指針,里面包含了這個打開文件的很多信息。比如文件內部的指針位置等。

????1打開文件

??????????????file*??fopen(const?char*filename??const?char*mode?)

1)?r???只讀方式打開一個文本文件???????????????????????????
??????????rb??只讀方式打開一個二進制文件?????????????????????????
??????????w???只寫方式打開一個文本文件???????????????????????????
?????????wb??只寫方式打開一個二進制文件?????????????????????????
?????????a???追加方式打開一個文本文件???????????????????????????
??????????ab??追加方式打開一個二進制文件?????????????????????????
??????????r+??可讀可寫方式打開一個文本文件???????????????????????
?????????rb+?可讀可寫方式打開一個二進制文件?????????????????????
??????????w+??可讀可寫方式創建一個文本文件???????????????????????
????????????wb+?可讀可寫方式生成一個二進制文件?????????????????????
????????????a+??可讀可寫追加方式打開一個文本文件???????????????????
????????????ab+?可讀可寫方式追加一個二進制文件

注意:要加上雙引號,例如:?fopen(argv[1],”rb”)

2)?若打開成功,返回文件指針類型的結構,若失敗,返回null

引申:file*?是一種文件指針,與char*,int*作對比,可知,它是一個指向文件的指針。它實際上是由系統定義的一個結構,該結構中含有文件名、文件狀態和文件當前位置等信息。在編寫源程序時不必關心file結構的細節。

2:關閉文件。

????????????int???fclose(FILE?*fp);

????注意其返回值,返回0,正常關閉文件,否則即為異常。不過貌似很少看到有對這個函數進行返回值檢測的,大概是關閉文件一般不會出現異常吧。

?????3:?單個字符讀寫操作

?????????????????int????fgetc?(fp);一個特例是getchar?=?fgetc(stdin)

?????返回值是讀到的字符的ASCII碼。如果已經到達文件尾部,那么讀出的是EOF(-1)。注意EOF是一個整形量。

?????????????????int???fputc?(字符數據?,?fp);?一個特例是putchar=fputc(字符數據,stdout)。如果寫入字符正確,那么返回寫入字符的ASCII碼,否則返回EOF,表示出錯。

?????4:字符串的操作

??????????????????int??fputs(字符串數據,fp);特例是?puts(字符串數據)------成功返回0,出錯返回非0;

?????????????????char?*fgets(字符串變量,n,fp);特例是gets(字符數據)-------這里的字符串變量用于保存讀到的字符串。N是你預期讀

???????????????????????取字符串長度加1.說明,如果遇到換行符,結束符,則讀取結束,否則直到讀取到n-1個字符后結束。成功,返回指向字符

???????????????????????串?的指針,可以用于嵌套使用。否則返回NULL指針。

???5:塊讀寫操作

?????????????int??fread(char?*buffer?,?int??size??,??int??count??,??FILE?*fp);

?????????????int??fwrite?(char?*buffer?,?int??size??,??int??count??,??FILE?*fp);

?????????????????這兩個函數不解釋!

????6:格式化輸入,輸出。

????????????????fscanf(文件指針,格式,輸入列表);特例是scanf

????????????????fprintf(文件指針,時隔,輸出列表);特例是printf

????7:文件內部讀寫指針操作

?????????????????int??rewind(FILE?*fp)

?????????????????int??fseek(FILE?*fp,signed?long?,where);-----where??:??SEEK_SET;SEEK_CUR;SEEK_END

?????????????????long??ftell(FILE?*fp);返回文件內部讀寫指針現在距離文件頭的位置。出錯返回-1L。

8:路徑獲取

char?*?getcwd(buffer?,?size_t?size).size是buffer大小的描述。

總結

以上是生活随笔為你收集整理的linux应用程序之----文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。