日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux学习:文件 I/O 函数

發布時間:2024/9/30 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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創建的文件的權限” 跟 “實際權限” 的關系如代碼所示:

int main() {int fd = open("hello", O_RDWR | O_CREAT, 0777); // 當前目錄下打開hello文件if(fd == -1){perror("open fault");}close(fd);return 0; } #文件的實際權限是 mode & ~umask:umask 默認 0002,先取反在取與

2、read 函數

(1)頭文件:#include <unistd.h>
(2)原型:

size_t read(int fd, void *buf, size_t count); // size_t 無符號整形值

(3)參數:
1)fd 文件描述符。
2) buf 傳出參數:緩存區,用于存放讀取的數據。
3)count 緩存區能存儲的最大字節數 sizeof(buf)。
(4)返回值:ssize_t 類型(本質:有符號整形,意味著可以是負數)
1)失敗:返回 -1
2)成功:> 0 讀出的字節數 = 0 代表文件讀完了。

3、write 函數

(1)頭文件:#include <unistd.h>
(2)原型:

ssize_t write(int fd, const void *buf, size_t count);

(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 函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。