linux下的文件操作

這一章給出了諸多的文件操作的函數,我把這些函數總結一下

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(要寫入的文件的描述符,要寫入的數據的指針,要寫入的字節數);


出錯返回-1,文件必須可寫;


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()


發佈了36 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章