linux time函式 Linux基礎知識 三

2021-10-13 16:04:21 字數 3358 閱讀 9458

本篇介紹一些linux檔案操作api 函式的使用.

1.基本概念

1.1 linux 下一切皆檔案(網路裝置除外)

(1) 普通檔案

(2) 目錄

(3) 硬體裝置

- 控制台 /dev/console

- 標準輸入輸出裝置 /dev/tty

(4) 軟鏈結檔案

(5) 硬鏈結檔案

1.2 檔案操作 api

檔案操作 api主要分為linux系統api和標c庫api, 其區別分別體現在效率和移植行上.

(1) linux :open read write close lseek ...( 效率高)

(2) 標 c 庫函式 :fopen fread fwrite fclose fseek ...( 移植性強)

2. linux的檔案基本操作 api介紹

2.1 建立檔案

creat 函式 : 用於建立檔案

creat (const char* pathname, mode_t mode)
等價於 open 函式使用 flags 引數為 o_creat o_wronly o_reunc

2.2 開啟檔案

open 函式 :用於開啟檔案, 建立檔案

2.3 關閉檔案

close函式 : 用於關閉檔案

int close(int fd)fd : 要關閉檔案對應的檔案描述符, 即 open 函式的返回值返回值 : 失敗 erron, 成功 0
2.4 寫檔案

write函式 : 用於寫檔案

ssize_t write(int fd, const void* buf, size_t count)fd : 要操作的檔案buf : 資料來源count : 期望寫入的位元組個數返回值 : 成功 返回實際寫入位元組個數,返回 0 表示沒有寫入任何資訊,失敗返回errno
2.5 讀檔案

read函式 : 用於讀檔案

ssize_t read(int fd, void* buf, size_t count) fd : 要操作的檔案buf : 從檔案中讀取資料的寫入位置count : 期望讀取的位元組個數返回值 : 成功 返回實際讀取位元組個數, 返回 0 代表讀到這個檔案的末尾, 失敗返回-1
3. linux的檔案相關操作 api介紹

3.1 檔案偏移量

每個開啟的檔案都記錄著當前讀寫位置, 開啟檔案時讀寫位置是0, 表示檔案開頭, 通常讀

寫多少個位元組就會將讀寫位置往後移多少個位元組, 這個讀寫位置稱作檔案偏移offset, 檔案

lseek 函式 : 用於改變檔案表中 offset 的取值

off_t lseek(int fd, off_t offset, int whence)fd : 操作的檔案offset : 偏移量whence : 偏移的起始位置, 有三個取值- seek_set, 從檔案頭開始計算- seek_cur, 從當前位置計算偏移- seek_end, 從檔案末尾計算偏移返回值 : 成功, 移動到的目標位置與檔案頭的距離, 失敗返回-1
(1) lseek 計算檔案的長度

len=lseek(fd,0,seek_end);

(2) lseek 移動的目標可以超越檔案的末尾

後續執行寫入操作會在檔案中形成空洞檔案, 空洞檔案不佔磁碟, 但被算在檔案大小內

3.2 檔案描述符複製

開啟現存盤案或新建檔案時, 核心會返回乙個檔案描述符, 每乙個檔案描述符會與乙個開啟檔案相對應, 不同的檔案描述符也會指向同乙個檔案

dup / dup2函式 : 用於複製檔案描述符, 不會複製檔案表, 出現多個檔案描述符

int dup(int oldfd)oldfd : 要複製的檔案描述符返回值 : 新的檔案描述符, 作業系統選取未使用的最小檔案描述符int dup2(int oldfd, int newfd)oldfd : 要複製的檔案描述符newfd : 指定新的檔案描述符, 如果 newfd 已經被使用, 系統會強行關閉對應的檔案, 使得newfd 處於未使用狀態
實際程式設計過程中, dup / dup2函式通常用於重定向標準輸出和標準出錯

3.3 檔案競爭

fcntl函式 : 用於對已開啟的檔案描述符進行各種控制操作以改變已開啟檔案的的各種屬性

fcntl函式可以實現很多功能, 但其主要功能是檔案記錄鎖, 解決多個程序同時競爭乙個檔案的問題

int fcntl(inf fd, int cmd, ... /* arg */)fd : 檔案描述符cmd : 需要執行的具體操作 - f_getlk : 測試 lock 所表示的所是否可以加, 若可加 lock.l_type 設定成 f_unlck, 否則通過 lock 返回當前鎖的資訊 - f_setlk : 設定所的型別 - f_setlkw : 加鎖等待, 加鎖不成功則一直等待, 除非被訊號打斷 返回 -1 arg : 針對cmd的值, fcntl能夠接受第三個參 arg
當fcntl用於管理檔案記錄鎖的操作時,第三個引數指向乙個stsuct flock *lock的結構體構體

struct flock ;
(1) 鎖機制是建議性鎖, 而不是強制性鎖

(2) 讀鎖 (共享鎖), 寫鎖(獨佔鎖)

(3) 鎖機制並不是真正把檔案鎖起來, 加鎖不成功, 程式邏輯不去執行相應的檔案操作

3.4 檔案屬性獲取

struct stat ;
(1) stat 函式 : 獲取檔案的詳細資訊

int stat(const char *path, struct stat *buf);path : 要獲取屬性相關資訊的檔名稱(包含路徑), 不需要開啟檔案, 直接給檔案路徑buf : 檔案屬性結構體, 為傳出引數
(2) fstat函式 :

int fstat(int fd, struct stat *buf)path : 檔案描述符buf : 檔案屬性結構體, 為傳出引數
(3) lstat函式 : 獲取軟鏈結檔案本身的資訊

int lstat(const char *path, struct stat *buf)path : 要獲取屬性相關資訊的檔名稱(包含路徑), 不需要開啟檔案, 直接給檔案路徑buf : 檔案屬性結構體, 為傳出引數
(4) stat / lstat / fstat之間的區別

- fstat 函式 : 系統呼叫的是乙個 "檔案描述符", 而另外兩個則直接接收"檔案路徑

linux time命令學習

time命令用來統計乙個執行程式的系統資源使用狀況。time命令會先執行這個命令或程式,並在其執行結束時將統計結果顯示出來。在統計結果中,其中 real是命令或程式的實際執行時間 user是命令或程式在user space的執行時間 sys是命令或程式在kernel space的執行時間。sh ti...

詳解Linux time 命令的使用

1.命令簡介 time resources memory resources io resources command info 2.命令格式 time options command arguments.3.選項說明 f format,format format 使用指定格式輸出。如果沒有指定輸出...

linu入門練習

0 directories,3 files 6.刪除 tmp sys a 檔案。root 9900 rm tmp sysroot a rm remove regular empty file tmp sysroot a y 7.建立目錄 tmp下建立4個目錄,並在這四個目錄下分別建立乙個test目錄...