Summary Day32

1 . 文件管理

1.1 標C文件處理和UC文件處理函數的比較:

標C文件處理函數比UC的文件處理函數速度快,因爲標C內部獨立輸入輸出緩衝區,

會積累一定數量之後再寫入文件,因此讀寫效率比較高

使用time命令可以獲取進程的運行時間

time b.out

real  0m0.081s  =>真實時間

user  => 用戶態時間

sys => 內核時間


1.2 文件描述符:

進程 =》 文件描述符表=》文件表=》V字節(包含I字節)

文件描述符就是一個整數,可以代表打開的文件,但是文件的信息不是存在文件描述符中,而是存在文件表等結果中

當打開一個文件時,系統會把文件的信息存入文件表等結構中,但是處於安全的考慮,文件表等結構並不是直接操作,而

是給文件表對應一個編號,拿着編號進行操作,而編號就叫做文件描述符

在進程的內部維護一張文件描述符的總表,當使用open函數打開文件時,就會加載該文件的信息到內存中,然後去文件描述符

總表查找一個最小的未被使用的描述符建立和文件表對應的關係,而文件描述符是非負整數

close函數不會改變文件描述符的整數值,只是會讓描述符無法代表一個文件


1.3 dup/dup2函數

#include <unistd.h>

int dup(int oldfd);

函數功能: 主要用於根據參數指定的描述符進行復制,成功返回新的描述符,失敗返回-1

int dup2(int oldfd, int newfd);

函數功能:主要用於將oldfd參數指定的文件表地址拷貝到newfd中,如果newfd佔用,則考慮強制關閉,

成功則返回文件描述符,失敗返回-1


1.4 fcntl函數

#include <unistd.h>

#include <fcntl.h>

int fcntl(int fd, int cmd, ..../*arg*/);

第一個參數:文件描述符(對哪個文件操作)

第二個參數:命令/操作(執行什麼樣的操作)

F_DUPFD

F_GETFD/F_SETFD

F_SETFL/F_SETGL

F_SETLK/F_SETLKW/F_GETLK

第三個參數:可變長參數

函數功能:

(1)主要用於複製文件描述符

(2)設置、獲取文件描述符的功能

(3)設置獲取文件狀態標誌的功能

(4)主要勇於實現建議文件鎖的功能


1.5 使用fcntl實現文件鎖的功能

(1)文件鎖的作用

當有多個進程同時對一個共享文件進行讀寫操作時,可能會造成數據混亂和不一致性,理論上應該要求多個進程對文件

操作進行串行而不是並行,如果兩個進程都是讀文件則允許同時進行,只要有一個寫操作,則另外一個進程應該等待,爲

了實現該功能,需要藉助文件鎖來實現

(2)實現文件鎖的功能,

fnctl函數的第三個參數值: 結構體指針

結構體:  struct flock

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章