目錄
一、檔案程式設計
1、linux檔案
2、檔案描述符(file descriptor)
3、常用api(open、write/read、lseek、close)
(1)open():開啟檔案函式
(2) close():關閉檔案
(3)write():寫檔案
(4)read():讀檔案
(5)lseek():游標定位
linux一點哲學,「一切皆為檔案」,在linux中對目錄和裝置的操作都等同於對檔案的操作。linux檔案可以分為:普通檔案,管道檔案,目錄檔案,鏈結檔案,裝置檔案,socket。
在程式設計中簡稱fd,檔案描述符在形式上是乙個非負整數。實際上,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。標準輸入:stdin_fileno 0
標準輸出:stdout_fileno 1
標準出錯處理:stderr_fileno 2
這三個符號常量的定義位於標頭檔案 unistd.h,乙個程序啟動都會開啟這三個檔案。
各引數及返回值的含義如下:
1、flags: *注意:上述三個常量必須指定且只能指定乙個。 *注意:上述值僅為可選取值例如:2、mode(許可權選擇)符號 & 和 | 這兩個運算子都是二進位制的按位操作符。
&: 二進位制「與」(都為1時,結果是1,否則是0。),比如:1010 & 1011 = 1010,1010 & 1000 = 1000。
|: 二進位制「或」(有1時,結果是1,都是0時,結果為0。),比如:1010 | 1011 = 1011,1010 | 1000 = 1010。
常建立模式:
s_irusr---------------可讀
s_iwusr---------------可寫
s_ixusr---------------可執行
s_irwxu---------------可讀、寫、執行
除用以上巨集定義還可以用數字來表示
所在標頭檔案
#include
函式原型
int close(int fd);//fd即要關閉的檔案描述符
各引數及返回值的含義如下:*注意:每次開啟檔案操作後要記得關閉以免造成檔案損壞或未知錯誤,當乙個程序終止時,核心會自動關閉它所有開啟的檔案。
所在標頭檔案
#include
函式原型
ssize_t write(int fd, const void *buf, size_t count);
各引數及返回值的含義如下:所在標頭檔案*注意1:size_t是無符號整型,ssize_t是有符號整型
*注意2:buf指向的記憶體空間必須事先分配好
對於const void *buf的解釋就是定義乙個void*的變數lpbuf,而且這個變數,
也就是lpbuf在程式中是不允許被改變量值的,
如果有這麼一句:
void fun();
lpbuf=fun;
那麼將是錯誤的,
因為lpbuf的定義中已經宣告了,它的屬性是const,即不能被改變。例項中可以自己定義型別,可將char *buf="hello"放入
#include
函式原型
ssize_t read(int fd, void *buf, size_t count);
各引數及返回值的含義如下:所在標頭檔案
#include #include
函式原型
off_t lseek(int fd, off_t offset, int whence);
各引數及返回值的含義如下:vimdiff a.cb.c可以同屏比較兩個檔案內容(1)whence:
系統程式設計之檔案系統程式設計
系統呼叫 所有的作業系統都提供多種服務的入口點,程式由此向核心請求服務。這些可直接進入核心的入口點被稱為系統呼叫。不同作業系統提供了自己的一套系統呼叫,所以系統呼叫無法實現跨平台使用。而且頻繁地系統呼叫,在使用者態和核心態之間切換,很耗費資源,效率不高。c標準庫提供了操作檔案的標準i o函式庫,與系...
linux系統程式設計之檔案I O
一 檔案描述符 linux系統中,所有開啟的檔案都對應乙個數字,這個數字由系統來分配,稱為檔案描述符。pcb程序控制塊裡有檔案描述符表,以陣列形式存放於核心區。乙個程序預設開啟3個檔案描述符 stdin fileno 0 stdout fileno 1 stderr fileno 2 新開啟檔案返回...
linux系統程式設計之檔案IO
1.開啟檔案的函式open,第乙個引數表示檔案路徑名,第二個為開啟標記,第三個為檔案許可權 效果測試 列印開啟檔案返回的描述符為3,同時建立了檔案testopen1 2.建立檔案函式creat和關閉函式close 使用 include include include includeint main ...