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