int open(const char* pathname, int flags);//文件名,打開方式
int open(const char* pathname, int flags, mode_t mode);//文件名,打開方式 權限
int create() //不常用
int close(int fd);
與printf和scanf有所區別,read和write是將文件讀至緩衝區或從緩衝區寫入文件,是否會偏移呢?
a.讀寫過程中文件描述詞fd不會改變,始終指向文件。
b. read 過程中雖然是相同的文件描述詞,但是會存在一個偏移,不會讀取已經讀取過的文件內容。也就是說對於文件中存放“HelloWorld”,調用兩次相同的read,第一次會讀進緩衝區“Hello”,第二次讀進緩衝區"World" 。緩衝區中內容會被覆蓋。
c. write過程類似,文件中會產生偏移,而對於緩衝區不會,兩次調用write,緩衝區中存放“HelloWorld”,文件中會是"HelloHello"。
d.write和read共用一個文件中的偏移。
改變文件大小
#include<unistd.h>
//將fd指定文件的大小,改爲參數length指定大小。
int ftruncate(int fd, off_t length);
fd必須表示的是打開的可寫入的文件描述詞。
如果原來文件比length大,則超過部分會被刪除。
返回值 成功返回0, 失敗返回-1 。
文件定位
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fd, off_t offset, int whence);