這一章給出了諸多的文件操作的函數,我把這些函數總結一下
open() creat() close() read() write() lseek() fstat() stat() mmap() nummap() fcntl() ioctl()
1.open()
//函數原型
int open(const char *pathname , int flags);
int open(const char *pathname , int flags , mode_t mode);
//文件描述符 open(路徑,方式,權限);
其中flags有:
符號 值 作用
O_RDONLY 0 打開方式爲只讀
O_WRONLY 1 打開方式爲只寫
O_RDWR 2 打開方式爲讀寫
O_CREAT 64 文件不存在,就創建該文件(加上這個後必須填第三個權限位)
O_EXCL 128 查看文件是否存在,如果同時使用了(O_EXCL|O_CREAT)且文件存在,就會open()就會返回-1(文件打開失敗)
O_TRUNC 512 打開的同時清空該文件
O_APPEND 1024 寫操作時,都寫到文件末尾
函數判斷標識位的時候是按位判斷的,最低位爲0,則使用O_RDONLY最低位則使用1則爲O_WRONLY。低二位爲1則使用O_RDWR,低7位爲1則使用O_CREAT...
顯然,可以通過位運算 或---> ‘|’ 把它們疊加起來。
對於權限位:
這一位只有選擇O_CREATf方式打開,纔有效。權限位有對應的符號 :
符號 值 對應文件權限
S_IRWXU 0700 rwx|===|===
S_IRUSR 0400 r==|===|===
S_IWUSR 0200
=w=|===|===
S_IXUSR 0100
==x|===|===
S_IRWXG 0070
===|rwx|===
S_IRGRP 0040 ===|r==|===
S_IWGRP 0020 ===|=w=|===
S_IXGRP 0010
===|==x|===
S_IRWXO 0007
===|===|rwx
S_IROTH 0004
===|===|r==
S_IWOTH 0002
===|===|=w=
S_IXOTH 0001
===|===|==x
這個也可以用位運算或疊加,不建議用標識符,還是直接填權限,簡單又方便。
注:1.路徑不能識別自定義變量和環境變量,可以識別 ./ (當前目錄)和 ../ (上個目錄)
2.文件描述符用於對文件的操作,是一個int型的數,表示當前第幾個文件。
3.文件打開失敗,open()返回-1.
2.creat()
//函數原型
#inlcude<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int creat(const char *pathname,mode_t mode);
//等同於int open(const char *pathname,O_WRONLY|O_CREAT|O_TRUNC,mode_t mode);
//參照open()吧
3.close()
//函數原型
#include<unistd.h>
int close(int fd);
//(成功結束返回0,否則-1) close(文件描述符)
用於關閉open()打開的文件.
4.read()
<span style="font-size:12px;color:#330033;">//函數原型
#include<unistd.h>
ssize_t read(int fd,void *buf, size_t count);
//成功讀取的字節數 read(要操作的文件的描述符,要存放的地址指針,要讀取的個數);
//size_t與ssize_t在頭文件中被typedef定義
//typedef unsigned int size_t;
//typedef signed int ssize_t;</span>
關於read()的返回值,如果執行失敗返回-1;執行成功,返回成功讀取的字節數;如果執行函數之前文件已經被讀到末尾,返回0.
另外執行read()對應的文件的打開必須要有可讀權限。
5.write()
//函數原型
#include<unistd.h>
ssize_t write(int fd,const void *buf, size_t count);
//成功寫入的字節數 write(要寫入的文件的描述符,要寫入的數據的指針,要寫入的字節數);
6.lseek()
//函數原型
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fildes,off_t offset,int whence);
//偏移量 lseek(文件描述符,偏移量,操作模式);
//typedef long int off_t
操作方式:
符號 作用
SEEK_SET 設置偏移量爲 0+offset
SEEK_CUR 設置偏移量爲 當前位置+offset
SEEK_END 設置偏移量爲 文件尾部+offset
如果執行成功返回新文件的偏移量,失敗返回-1
7.fstat()