Date:2009.05.08
Content:檔案I/O
大致說明可用的檔案I/O函數:開啟檔案、讀檔案、寫檔案等;檔案I/O大致包括5個函數:open/read/write/lseek/close
本次說明的函數經常被稱為不帶緩衝的I/O,指的是每個read和write都調用核心中的一個系統調用。
只要涉及到多個進程間的共用資源,原子操作的概念就相當重要。
1、open函數
調用open函數可以開啟或建立一個檔案
********************************************************************************
pathname是要開啟或者建立檔案的名字
oflag參數可用來說明此函數的多個選項(O_RDONLY表示唯讀開啟;O_WRONLY表示唯寫開啟;O_RDWR表示讀寫開啟)
這三個常量必須指定且只能指定一個,還有部分常量是可選的,在這裡不再給出
由open返回的檔案描述符一定是最小的未用描述符數值
********************************************************************************
#include <fcntl.h><br />int open(const char *pathname, int oflag, ... /* mode_t mode */ );<br />//傳回值:若成功返迴文件描述符,若出錯則返回-1
2、creat函數
調用creat函數可以建立一個檔案
#include <fcntl.h><br />//傳回值:同open一樣<br />int creat(const char *pathname, mode_t mode);<br />
3、close函數
調用close函數關閉一個開啟的檔案
#include <unistd.h><br />//傳回值:若成功返回0,否則返回-1<br />int close(int filedes);
4、lseek函數
調用lseek函數顯式的為一個開啟的檔案設定其位移量
********************************************************************************
offset的解釋與參數whence有關
若whence是SEEK_SET,則將該檔案的位移量設定為距檔案開始處offset個位元組
若whence是SEEK_CUR,則將該檔案的位移量設定為當前值加offset,offset可正可負
若whence是SEEK_END,則將該檔案的位移量設定為檔案長度加offset,offset可正可負
********************************************************************************
#include <unistd.h><br />//若成功返回新的檔案位移量,若出錯則返回-1<br />off_t lseek(int filedes, off_t offset, int whence);<br />
執行個體3-1測試能否對標準輸入設定位移量
#include "apue.h"</p><p>int<br />main(void)<br />{<br /> if (lseek(STDIN_FILENO, 0, SEEK_CUR) == -1)<br /> printf("cannot seek/n");<br /> else<br /> printf("seek OK/n");<br /> exit(0);<br />}