Linux学习:文件 I/O 函数
1、open 函數
(1)頭文件:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>(2)原型:
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode)(3)參數:
1)flag :
必選:O_RDONLY 、O_WRONLY 、O_RDWR 三個必含且只能含其一(彼此互斥)。
可選:O_CREAT(文件不存在,創建文件)、 O_APPEND(原文件后追加內容)、O_TRUNC(原文件清空,再添加內容)、 O_NONBLOCK(設置非阻塞)。
2)mode:八進制的數,用于設置文件權限 ,但并不是創建文件的最終權限。
(4)返回值:
1)成功:返回新的文件描述符。
2)失敗:返回 -1,設置 errno。
“通過open創建的文件的權限” 跟 “實際權限” 的關系如代碼所示:
2、read 函數
(1)頭文件:#include <unistd.h>
(2)原型:
(3)參數:
1)fd 文件描述符。
2) buf 傳出參數:緩存區,用于存放讀取的數據。
3)count 緩存區能存儲的最大字節數 sizeof(buf)。
(4)返回值:ssize_t 類型(本質:有符號整形,意味著可以是負數)
1)失敗:返回 -1
2)成功:> 0 讀出的字節數 = 0 代表文件讀完了。
3、write 函數
(1)頭文件:#include <unistd.h>
(2)原型:
(3)參數:
1) buf 傳入參數:要寫入文件的數據。
2) count buf 的實際長度 , 如果先讀后寫,一般采用 read 的返回值 len。
(3)返回值:
1)失敗:返回 -1
2)成功:> 0 寫入的字節數。
4、lseek 函數
(1)頭文件:
#include <sys/types.h>#include <unistd.h>(2)原型:
off_t lseek(int fd, off_t offset, int whence);(3)參數:
1)whence :設置文件指針的位置 。
2)offset :相對于文件指針位置的向后偏移量。
(4)返回值:文件指針的當前位置(相對于頭部的偏移量)
(5)使用:
1)將文件指針移動到頭部: lseek(fd, 0, SEEK_SET);
2) 獲取文件指針的當前位置: int len = lseek(fd, 0, SEEK_CUR);
3) 獲取文件長度: int len = lseek(fd, 0, SEEK_END);
4) 文件的拓展:原大小 100K 拓展為 1100K (拓展的 1000K 都是通過\0 占位):
第一步:lseek(fd, 1000, SEEK_END); //從尾部向后拓展 1000K
第二步:作一次寫操作 write(fd, “a”, 1);
注意:文件拓展其實常用函數實現 truncate(fd, length)
5、阻塞和非阻塞
因為文件屬性產生了阻塞現象。
普通文件默認非阻塞;管道、fifo、內存映射區、套接字都默認阻塞。
注意:open 時候可以通過 O_NONBLOCK 設置非屬性
總結
以上是生活随笔為你收集整理的Linux学习:文件 I/O 函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP概述
- 下一篇: Linux学习:文件属性函数