C語言檔案IO檔案的非讀寫操作3

2021-09-16 12:42:44 字數 2817 閱讀 6671

非讀寫操作

(1)lseek函式 ------------ 調整檔案指標位置

該函式的用法基本和fseek一樣,唯一的區別是lseek使用檔案描述符代表乙個開啟的檔案

標準io  檔案io
開啟/關閉 fopen()/fclose() open()/close()

讀 fgetc()/fgets()/fread()/fscanf() read()

寫 fputc()/fputs()/fwrite()/fprintf() write()

移動檔案指標 fseek() lseek()

代表開啟的檔案 檔案流(file *) 檔案描述符(fd)

(2)dup()/dup2() --------------- 複製檔案描述符

這兩個函式的作用是複製乙個已經開啟的檔案描述符,用乙個新的描述符代表他,之後可以通過新的複製的描述符訪問之前描述符代表的檔案

dup函式是由系統選擇乙個最小的沒有使用的描述符當做新的描述符,dup2函式是由程式設計師指定新的描述符,如果指定的描述符已經被使用,就會先關閉再使用(安全隱患)

dup()/dup2()只複製檔案描述符,不複製檔案表

(3)fcntl函式 ----------- 複製檔案描述符 設定/獲取檔案描述符屬性 設定檔案鎖…

根據cmd引數決定該函式的功能

a.f_dupfd  --------- 複製檔案描述符,傳入的第三個引數作為新描述符值,和dup2的區別是不會強行關閉已經使用的描述符,而是尋找大於等於引數的最小未使用的值

b.f_getfl/f_setfl --------- 獲取/設定檔案描述符狀態,比如許可權;其中建立標誌不能獲取也不能修改,許可權標誌不能修改

c.f_getlk/f_setlk/fsetlkw ----------- 檔案鎖的操作

設計檔案鎖的原因是防止多個程式同時對檔案進行讀寫運算元據混亂

檔案鎖是當乙個程序在讀寫檔案時,對其他程序的讀寫操作進行限制

限制規則:

乙個程序寫,其他程序不允許讀/寫

乙個程序讀,允許其他程序讀,不允許其他程序寫

檔案鎖是一種讀寫鎖,包括寫鎖和讀鎖

寫鎖是乙個互斥鎖,不允許其他程序讀/寫,如果程序是寫檔案,必須加寫鎖

讀鎖是乙個共享鎖,允許其他程序讀,不允許其他程序寫,如果程序是讀檔案,應該加讀鎖

當cmd為f_setlk/f_setlkw,可以用來給檔案加鎖

使用檔案鎖時,第三個引數就是鎖結構

struct flock ;

其中l_type決定鎖的型別,l_whence l_start l_len決定鎖定的位置

如果加鎖程式已經結束,鎖自動釋放,但是我們應該手動釋放

在讀/寫檔案之前,對檔案進行加鎖操作,在讀寫完成之後,進行解鎖操作
如:

程式1:

加鎖

寫檔案解鎖

程式2:

加鎖

寫檔案解鎖

f_setlkw和f_setlk的區別在於f_setlkw在獲取不到鎖時會在原地阻塞,直到獲取鎖成功

f_getlk不是用來獲取鎖,而是用來測試某個鎖是否可以加上,並不是真正加鎖

(4)stat函式 ----------- 獲取檔案屬性資訊

引數:

path:要獲取資訊的檔案路徑

buf:傳出引數,傳出檔案資訊

返回值:

成功返回0,失敗返回-1
struct stat結構體:

struct stat ;

注:ctime函式可以將time_t型別轉換成時間字串

st_mode的8進製高2位表示檔案型別,可以使用以下巨集來判斷

st_mode的8進製低3位表示許可權

st_mode&0777
fstat和stat的區別在於傳入的是檔案描述符

lstat和stat的區別在於如果檔案是軟鏈結,stat獲取的是原檔案的資訊,lstat獲取的是軟鏈結本身的資訊

(5)access函式 ------------ 測試使用者對檔案的許可權或者檔案是否存在

引數:

pathname:要測試的檔案路徑

mode:要測試的內容

r_ok:讀許可權

w_ok:寫許可權

x_ok:執行許可權

f_ok:是否存在

返回值:

返回0表示有許可權/檔案存在
(5)其他函式

chmod() ------------ 修改檔案許可權

remove() ----------- 刪除檔案/空目錄

unlink() ---------- 刪除檔案

rmdir() ---------- 刪除空目錄

umask() --------- 修改許可權遮蔽字

rename() -------- 檔案改名

truncate() -------- 指定檔案大小

mkdir() --------- 建立目錄

chdir() -------- 切換當前目錄(cd)

getcwd() --------- 獲取當前絕對路徑(pwd)

作業:

設計乙個登入程式,分為超級管理員和普通賬戶,超級管理員賬號和密碼固定(admin 12345)

超級管理員可以新增和刪除普通賬戶,普通賬戶需要通過使用者名稱和密碼登入

如果連續三次使用者名稱密碼輸入錯誤,要求三分鐘後才可繼續登入(time)

C語言 讀寫檔案I O

c語言讀寫檔案的步驟一般是 建立或開啟檔案 讀或寫檔案 關閉檔案 當然讀或寫的過程中還可以通過操作當前檔案偏移量來控制讀寫位置。下面分別介紹這些函式。標頭檔案 include 此標頭檔案定義了以下oflag o rdonly 唯讀0 o wronly 只寫1 o rdwr 讀寫2 上面三個oflag...

檔案IO操作讀寫檔案

寫操作對應的有 put write等。寫操作的型別 ascii碼型別的可知字串 put put只能寫入一兩個字元,多了寫不了 include using namespace std intmain int args,char ar 二進位制型別寫檔案 write include using name...

IO檔案讀寫操作

如果是操作文字檔案型別 示例 streamwriter 用於寫入,可以使用 writeline 函式將內容寫入指定檔案當中 1 try2 16 console.writeline 寫入成功了。17 18 catch exception ex 19複製 如果檔案不存在,會自動建立。streamread...