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 輸出內容為...