1. 添寫至一個文件
任何一個需要多個函數調用的操作都不可能是原子操作,因爲在兩個函數調用之間,內核有可能會臨時掛起該進程。
UNIX系統提供了一種方法使這種操作成爲原子操作,該方法是在打開文件時設置O_APPEND標誌。這就使內核每次對這種文件進行寫之前,都將進程的當前偏移量設置到該文件的尾端處,於是在每次寫之前就不再需要調用lseek。
2. pread和pwrite函數
Single UNIX Specification包括了XSI擴展,該擴展允許原子性地定位搜索(seek)和執行I/O。pread和pwrite就是這種擴展。
- #include <unistd.h>
- ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset);
返回值:讀到的字節數,若已到文件結尾則返回0,若出錯則返回-1
- ssize_t pwrite(int filedes, const void *buf, size_t nbytes, off_t offset);
返回值:成功返回已寫的字節數,出錯返回-1
調用pread相當於順序調用lseek和read,但是pread又與這種順序調用有下列重要區別:
- 調用pread時,無法中斷其定位和讀操作。
- 不更新文件指針。
3. 創建一個文件
參看open函數的O_CREAT和O_EXCL選項的說明。