UNIX程式設計 3 檔案IO

2021-08-31 12:52:49 字數 3039 閱讀 3889

1.open函式

#include

int open(const char *pathname, int oflag, .../*mode_t mode */);

oflag引數:

o_rdonly 唯讀開啟

o_wronly 只寫開啟

o_rdwr 讀寫開啟

這三個必須指定乙個

下面是可選的:

o_creat 若此檔案不存在,則建立它

o_excl 如果同時指定了o_creat, 而檔案已經存在,則會出錯

o_trunc 如果此檔案存在,而且為只寫或讀寫成功開啟,則將其長度截短為0

o_noctty

o_nonblock

o_dsync 使每次write等待物理i/o操作完成,但是如果寫操作並不影響讀取剛寫入的資料,則不等待檔案屬性被更新

o_rsync 使每次乙個以檔案描述符作為引數的read操作等待,直至任何對檔案同一 部分進行的未決寫操作都完成

o_sync 使每次write等待物理i/o操作完成,包括由write操作引起的檔案屬性更新所需的io

2.create函式

#include

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

等價於 open(pathname, o_wronly|o_creat|o_trunc, mode);

3.close函式

關閉乙個開啟的檔案

#include

int close(int filedes);

4.lseek函式

#include

off_t lseek(int filedes, off_t offset, int whence);

whence取值說明:

seek_set 則將該檔案的偏移量設定為距檔案開始處offset個位元組

seek_cur 則將該檔案的偏移量設定為其當前值加offset,offset可正負

seek_end 則將該檔案的偏移量設定為檔案長度加offset,offset可正負

測試能否對標準輸入設定偏移量

#include "apue.h"

intmain(void)

建立乙個具有空洞的檔案

#include "apue.h"

#include

char buf1 = "abcdefghij";

char buf2 = "abcdefghij";

intmain(void)

5.read函式

#include

ssize_t read(int filedes, void *buf, size_t nbytes);

6.write函式

#include

ssize_t write(int filedes, const void *buf, size_t

nbytes);

將標準輸入複製到標準輸出

#include "apue.h"

#define buffsize 4096

intmain(void)

7.pread和pwrite函式

#include

ssize_t pread(int filedes, void *buf, size_t

nbytes, off_t offset);

ssize_t pwrite(int filedes, const void *buf,

size_t nbytes, off_t offset);

相當於順序呼叫lseek和read或write,但pread和pwrite是原子操作

8.dup和dup2函式

複製乙個現存的檔案描述符

9.sync,fsync和fdatasync函式

#include

int fsync(int filedes);

int fdatasync(int filedes);

void sync(void);

sync函式只是將所有修改過的塊緩衝區排入寫佇列,然後就返回,並不等待實際寫磁碟操作結束

fsync函式只對由檔案描述符filedes指定單一檔案起作用,並且等待寫磁碟操作結束

fdatasync類似於fsync,但他只影響檔案的資料部分。fsync還會同步更新檔案的屬性。

10.fcntl函式

#include

int fcntl(int filedes, int cmd, ... /* int arg */ );

cmd說明:

f_dupfd 複製乙個現有的描述符

f_getfd 複製檔案描述符

f_setfd 設定檔案描述符

f_getfl 對應於filedes的檔案狀態標誌作為函式值返回

f_setfl 將檔案狀態標誌設定為第三個引數值

f_getown 取當前接受sigio和sigurg訊號的程序id或程序組id

f_setown 設定接受sigio和sigurg訊號的程序id或程序組id

對於指定的描述符列印檔案標誌

對乙個檔案描述符開啟乙個或多個檔案狀態標誌

#include "apue.h"

#include

void

set_fl(int fd, int flags) /* flags are file status flags to turn on */

11.ioctl函式

#include /* system v */

#include /* bsd and linux */

#include /* xsi streams */

int ioctl(int filedes, int request, ...);

ioctl函式是io操作的雜物箱。

Unix環境高階程式設計 一 檔案I O

unix系統中大多數檔案i o只需用到五個函式 open read write lseek close。本章說介紹的i o是不帶緩衝的,即 每個read和write都呼叫核心中的乙個系統呼叫。不是iso c的組成部分。對於核心而言,所有開啟的檔案都通過檔案描述符引用。在中定義三個標準的檔案描述符 s...

Unix環境高階程式設計學習筆記(二) 檔案IO

談linux下的檔案操作,我們首先需要了解程序表,這是被每個程序所維護的一張開啟檔案的對映表,參照下圖。索引值是檔案描述符,與之相關聯的節點包含fd flag以及乙個指向file table的指標。其中fd flag主要包含close on exec標記,該標記的作用在於當開闢其他程序呼叫exec ...

I O 3 檔案操作

1 文字檔案編碼,文字檔案有不同的儲存方式,將字串以什麼樣的形式儲存為二進位制,這個就是編碼,utf 8 ascii unicode等,如果出現亂碼一般就是編碼的問題,文字檔案相關的函式一般都有乙個encoding型別的引數,取得編碼的方式 encoding.default encoding.utf...