linux c程式設計 檔案的讀寫

2022-05-31 08:12:13 字數 4106 閱讀 8248

linux

系統中提供了系統呼叫函式open()

和close()

用於開啟和關閉乙個存在的檔案

int open(const char *pathname,int flags)

int open(const char *pathname,int flags,mode_t mode)

int open(const char *pathname,mode_t mode)

其中flag

代表檔案的開啟方式

o_rdonly:

以唯讀方式開啟檔案

o_wronly

:以只寫的方式開啟檔案

o_rdwr

:以讀寫的方式開啟檔案

o_creat

:若開啟的檔案不存在,則建立該檔案

o_excl

:如果開啟檔案是設定了o_creat

,但是該檔案存在,則導致呼叫失敗

o_trunc

:如果以只寫或唯讀方式開啟乙個已存在的檔案,將該檔案截至0

:追加的方式開啟檔案

o_nonblock

:用於非堵塞介面i/o

o_nodelay

o_sync:

當資料被寫入外存或者其他裝置後,操作才返回。

其中mode

是開啟的許可權

s_irwxu 00700

設定檔案所有者的讀,寫,執行許可權

s_irwxg 00070

設定檔案所在使用者組的讀,寫,執行許可權

s_irwxo 00007

設定其他使用者的讀,寫,執行許可權

s_irusr 00400

設定檔案所有者的讀許可權

s_iwusr 00200

設定檔案所有的寫許可權

s_ixusr 00100

設定檔案所有者的執行許可權

s_irgrp 00040

設定使用者組的讀許可權

s_iwgrp 00020

設定使用者組的寫許可權

s_ixgrp 00010

設定使用者組的執行許可權

s_iroth 00004

設定其他使用者的讀許可權

s_iwoth 00002

設定其他使用者的寫許可權

s_ixoth 00001

設定其他使用者的執行許可權

檔案的讀操作:

ssize_t

read(int fd,void *buf,size_t count);

fd代表檔案描述符,buf

代表讀取的資料存放的buf

指標所指向的緩衝區,count

代表讀取資料的位元組數

函式呼叫成功,返回為讀取的位元組數,否則返回-1

檔案讀和寫的例子

void

open_and_read_file()

在這裡檔案都是從頭開始讀的,那麼如果我想從某個位置比如第n

個位元組開始讀取的時候該如何操作呢,這裡就需要用到檔案定位函式lseek

off_t

lseek(int fildes,off_t offset,int whence);\

fildes

是檔案描述符

offset

是偏移量

whence

代表用於偏移時的相對位置,可以取如下的幾個值

seek_set:

從檔案的開頭位置計算偏移量

seek_cur:

從當前的位置開始計算偏移量

seek_end:

從檔案的結尾開始計算偏移量

函式修改如下:

首先採用lseek

函式將檔案定位到從第11

個位元組開始,然後read

將從第11

個位元組開始讀取。

對於寫操作也是一樣的。

void

open_and_read_file()

乙個完整的建立,讀,寫檔案的例子:

#include

#include

#include

void write_file(int fd)

void read_file()

int create_file()

前面介紹的操作都是基於檔案描述符的檔案操作,下面來介紹基於流的檔案操作。兩者有什麼區別呢:

緩衝檔案系統的特點是:在記憶體開闢乙個「緩衝區」,為程式中的每乙個檔案使用,當執行讀檔案的操作時,從磁碟檔案將資料先讀入記憶體「緩衝區」,

裝滿後再從記憶體「緩衝區」依此讀入接收的變數。執行寫檔案的操作時,先將資料寫入記憶體「緩衝區」,待記憶體「緩衝區」裝滿後再寫入檔案。由此可以看出,記憶體

「緩衝區」的大小,影響著實際操作外存的次數,記憶體「緩衝區」越大,則操作外存的次數就少,執行速度就快、效率高。一般來說,檔案「緩衝區」的大小隨機器

而定。主要有

fopen,

fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek,

ftell,

rewind等2.

非緩衝檔案系統

緩衝檔案系統是借助檔案結構體指標來對檔案進行管理,通過檔案指標來對檔案進行訪問,既可以讀寫字元、字串、格式化資料,也可以讀寫二進位制數

據。非緩衝檔案系統依賴於作業系統,通過作業系統的功能對檔案進行讀寫,是系統級的輸入輸出,它不設檔案結構體指標,只能讀寫二進位制檔案,但效率高、速度

快,由於

ansi

標準不再包括非緩衝檔案系統,因此建議大家最好不要選擇它。本書只作簡單介紹。

open,

close, read, write, getc, getchar, putc, putchar

等。open

是系統呼叫

返回的是檔案控制代碼,檔案的控制代碼是檔案在檔案描述副表裡的索引,

fopen是c

的庫函式,返回的是乙個指向檔案結構的指標。

linux

中的系統函式是

open

,fopen

是其封裝函式。

fopen

可以移植,

open

不能來看

fopen

函式:file

*fopen(const char *path,const char *mode)

path

代表檔名路徑

mode

代表檔案的開啟方式。有

r,r+,w,w+,a,a+

等方式fgetc()

函式:從檔案讀取

1個位元組

intfgetc(file *stream).

如果出錯或者讀到檔案末尾,則返回

eoffputc()

函式:向指定的檔案寫入

1個檔案

intfputc(int c,file *stream);

例項**:

void

fopen_file()}}

fputc

和fgetc

函式只能一次性的讀取或者寫入乙個位元組,如果想讀取或者寫入乙個字串則需要用到

fgets()

和fputs()

函式。char

*fgets(char *s,int size, file *stream);

讀取到』

\n』轉移字元為結束,並在該行末尾新增乙個』

\0』組成完成的字串。在

size

位元組範圍內沒有讀到』

\n』結束符,則新增乙個』

\0』int

fputs(const char *s, file *stream);

void

fopen_file()

同樣的基於流操作的也有檔案的定位操作函式分別是

fseek

函式和rewind

函式int

fseek(file *stream,long offset,int whence)

這裡offset

表示移動的位元組數,要求位移量是

long

型資料。以便在檔案長度大於

64kb

不會出錯

whence

和前面介紹的一樣。

rewind

函式的作用是使位置指標重新返回檔案的開頭,函式沒有返回值。

Linux C檔案讀寫

linux 系統中提供了系統呼叫函式open 和close 用於開啟和關閉乙個存在的檔案 int open const char pathname,int flags int open const char pathname,int flags,mode t mode int open const ...

Linux C語言檔案讀寫

include include include include include include void main int fd,size char s hello world buffer 200 開啟 home yyf desktop linux 做寫入,如果該檔案不存在則建立該檔案 引數o w...

Linux C程式設計 3 使用C語言函式讀寫檔案

一 逐個字元讀檔案 1.源 include int main printf output data in test.txt n for i 0 i 5 i else printf nget suceesful n fclose fp return 1 test.txt檔案內容 hi,io 輸出內容為...