====文件IO====
Linux系統IO操作都是使用文件描述符來代表打開的文件,一個非負的的
整數,它被用來指所有類型的打開的文件,包括管道,FIFO,網絡套接
字,終端,設備和一般文件。每個進程都有自己的一套文件描述符
經常使用的三個文件描述符是:
標准輸入(stdin, STDIN_FILENO, 0)
標准輸出(stdout, STDOUT_FILENO, 1)
標准錯誤(stderr, STDERR_FILENO, 2)
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, ... /* mode_t mode */);
打開一個文件,返回文件描述符,失敗返回-1,並設置errno值
pathname表示文件路徑, flags表示訪問權限, mode表示設置文件的權限
flags的值通常如下所示的組合:
O_RDONLY 只讀打開
O_WRONLY 只寫打開
O_RDWR 讀寫打開
...
#include <unistd.h>
ssize_t read(int fd, void *buffer, size_t count);
從文件讀取最多count個字節到buffer中,成功返回讀取的字節數,0表示文件讀到
結尾EOF,-1表示出錯了
#include <unistd.h>
ssize_t write(int fd, void *buffer, size_t count);
從buffer中取出count個字節,寫入fd對應的文件中,返回實際寫入的
字節數,-1表述錯誤
#include <unistd.h>
int close(int fd);
關閉文件,0成功,-1失敗
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
改變文件的偏移量,offset相對whence的偏移量,成功返回新的偏移量,-1錯誤
偏移量:表示文件讀/寫到了哪個位置
whence的值:
SEEK_SET(文件開頭)
SEEK_CUR(當前偏移)
SEEK_END(文件結尾)
#include <sys/ioctl.h>
int ioctl(int fd, int request, ... /* argp */);
IO通用操作接口,操作類型繁多,具體可以查閱幫助手冊,返回值依賴request,-1錯誤
#include <fcntl.h>
int fcntl(int fd, int cmd, ...);
操作文件的屬性,錯誤返回-1,可以獲取或是設置文件的各種屬性
#include <unistd.h>
int dup(int oldfd);
拷貝文件描述符,返回一個沒有使用的最小文件描述符,錯誤返回-1值
#include <unistd.h>
int dup2(int oldfd, int newfd);
拷貝oldfd文件描述符為newfd文件描述符,如果newfd已經被
使用了,首先關閉它
#include <stdlib.h>
int mkstemp(char *template);
使用文件模版路徑創建一個臨時文件,路徑後6個字節必須為XXXXXX,創建
保證原子行,錯誤返回-1值