Linux下C程式設計入門筆記 檔案IO操作(二)

2021-04-23 10:00:54 字數 1426 閱讀 7259

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

哦,對了,前一篇我忘了講了,其實open同樣有建立檔案的功能,利用其引數就能實現,creat僅僅是建立乙個檔案,而open不僅可以建立檔案,建立檔案後會把所建立的檔案直接開啟,方便後續操作.

這裡有幾點可以思考,當我們要建立乙個檔案時,然後對檔案進行相關讀寫操作時,我們是用creat還是open? 這不廢話嗎? 當然是用open一步到位啦,省得建立了檔案再來呼叫open.另外creat和open在執行完之後分別返回些什麼,讓我們知道執行的結果如何? 這裡我們要先了解另外乙個概念,檔案描述符,如果不清楚,先去翻翻教材,我在這種裡簡單地將檔案描述符理解為,linux系統中,對檔案的唯一標識,我們在程式設計時通常這麼定義這個變數int fd;fd一看就明白了吧,只要你英語不是白痴,file descriptor. 是int型別的,如果open和creat乙個檔案成功的話,就會返回此檔案的描述符是乙個大於0的整數.所以當我們呼叫open和creat之後我們可以根據其返回值是否大於0判斷執行是否ok,如是不ok,就錯誤處理或搞其它的操作也行,隨你便了.

剛才列出了open的兩個不同的函式原型,也說到了open有建立檔案的功能,這裡可以一起發出兩個疑問,為什麼open要有兩個函式實現?如何用open來建立檔案呢?

能產生這兩個疑問真是太好了.比較下那兩個open的原型,發現只是多了乙個mode_t型別的引數啊.前一篇其實用過mode_t這個引數了,我當時頭腦發熱給建立的檔案,設定mode_t的值為0755 ,就是rwx許可權.你可以繼續思考,為什麼開啟乙個檔案時,乙個需要許可權引數,乙個不需要呢,謎底終於被你揭開了.因為當我們用open建立乙個檔案時,我們希望建立檔案時就給檔案賦上相應的許可權,而如果僅僅是開啟乙個已存在的檔案或裝置,這個許可權就不需要了,其實這裡還是沒有說到重點.下面通過真實的例子來說說,是怎麼一回事

#include 

#include 

#include 

#include 

#include 

int main(int argc ,char *argv)

//如果flag引數裡有o_creat表示,該檔案如果不存在,系統則會建立該檔案,該檔案的許可權由第三個引數決定,此處為0755

//如果flah引數裡沒有o_creat引數,則第三個引數不起作用.此時,如果要開啟的檔案不存在,則會報錯.

//所以fd=open(argv[1],o_rdwr|o_trunc),僅僅只是開啟指定檔案

if((fd=open(argv[1],o_creat|o_rdwr|o_trunc,0755))<0)else

close(fd);

exit(0);

}這段**並沒有把open和close的功能表現得很完全,但是基本上就是引數的不同,而產生不同的功能了,多查api.

Linux下C程式設計入門筆記 檔案IO操作

一 linux檔案的io程式設計應該算是每個入門者最先涉及的,我也不例外。希望通過blog的形式,記錄下自己每天學習的點點滴滴,我相信滴水穿石,儘管記錄的文字都比較簡單,對於高手而言抑或沒有什麼技術含量,但我堅信堅持到最後,就是大牛。好了,廢話說了不少了,開始我的筆記吧。linux下對檔案的操作同其...

Linux下C程式設計入門

這裡向大家介紹一下在linux unix 的機器上,進行 c c 程式設計的一些入門級知識。所需具備的背景知識 開發所需的基本環境 獲得幫助的途徑 通過乙個例項了解基本步驟 prerequisite 先決條件 在linux上編寫 c 程式,至少要熟悉以下兩方面的基礎知識 1 c語言的程式設計基礎,至...

linux下C程式設計筆記

1 system 函式 相關函式 fork,execve,waipid,popen 表頭檔案 include 函式定義 int system const char string 返回值 如果fork 失敗 返回 1 出現錯誤 如果exec 失敗,表示不能執行shell,返回值相當於shell執行了e...