檔案
unix支援在不同程序之間共享開啟的檔案。
核心使用三種資料結構表示開啟的檔案:
原子操作
一般而言,原子操作指的是由多步組成的操作。如果該操作原子的執行,要麼執行完所有步,要麼一步也不執行,不可能只執行所有步驟的乙個子集。
2、 注意:
原子操作函式:pread, pwrite
pread:相當於呼叫read、lseek,但是區別如下
l 呼叫pread時無法中斷其定位和讀操作
l 不更新檔案指標
3.12 dup和dup2函式
********************===
int dup(int files);
int dup2(int files, int files2);
********************====
功能:成功返回新的檔案描述符,出錯返回-1;
注意:1、由dup返回的檔案描述符,一定是當前可用檔案描述符中最小的檔案描述符。
2、可以用dup2指定返回的檔案描述符的具體值。
l 如果file2正在開啟,則先將其關閉。
l 如果files等於file2,則返回file2的值,而不關閉。
3、3.13 sync fsync和fdatasync函式
注意:延遲寫:由於核心中設有緩衝區快取記憶體或頁面快取記憶體,大多數的磁碟io都是通過緩衝進行的,當寫資料時,核心通常會將資料複製乙份到緩衝區,但是如果緩衝區尚未寫滿,不會排入輸出佇列。直到緩衝區被寫滿或這塊緩衝區需要重用來儲存其他的資料。
優點:缺點:
解決方法:
² sync fsync fdatasync
sync:
只是將所有修改過的塊的緩衝區排入寫對了,然後就返回。不等待寫磁碟結束。
fsync:
只針對檔案描述符為files的單一檔案起作用,等待檔案寫磁碟結束再返回。
fdatasync:
只影響檔案的資料部分,而且還具有同步更新檔案屬性的功能。
3.14 fcntl函式
可以改變自己開啟的檔案的性質。
#include
int fcntl(int fileds,int cmd, …);
功能:1) 複製乙個現有的檔案描述符cmd = f_dupfd
2) 獲得/設定檔案描述符的標誌 cmd = f_getfd 或 f_setfd
3) 獲得/設定檔案的狀態標誌 cmd = f_getfl 或 f_setfl
4) 獲得/設定非同步io所有權 cmd = f_getown 或 f_setown
5) 獲得/設定記錄鎖 cmd = f_getlk 、f_setlk或 f_setlkw
注意:l 第三個引數是指向乙個結構的指標。
檔案系統
如果用名字引用檔案的函式時,需要了解該函式是否跟隨符號鏈結到達它所鏈結的檔案,如果具有,則其路徑名引數引用由符號鏈結指向的檔案,否則直接引用鏈結的本身,而 不是該鏈結指向的檔案。(mkdir mkinfo mknod rmdir這幾個函式除外)
o_creat和o_excl兩者呼叫open函式的時候若路徑名引用符號鏈結,open將出錯返回,並將errno設定為eexist。這種處理方式意圖是堵塞乙個安全性漏洞,是具有特權的程序不會被誘騙對不合適的檔案進行寫操作。
第四章 檔案和目錄
4.1 stat 、fstat和lstat函式
#include
int stat(const char *pathname, struct stat*buf);
int fstat(int fileds, struct stat* buf);
int lstat(const char *pathname,strcut stat *buf);
功能:成功返回0,若出錯返回-1
stat:
返回與命名檔案有關的資訊結構
fstat:
返回與該檔案描述符有關的資訊結構
lstat:
返回與該檔案符號鏈結有關的有關資訊結構
第二個引數 buf指標,指向我們必須提供的結構。
4.2 檔案型別
1、檔案的型別:
1) 普通檔案 s_isreg
2) 目錄檔案 s_isdir
注意:任何乙個程序都有許可權讀目錄檔案,但是只有核心才有許可權寫該目錄檔案
3) 塊特殊檔案s_isblk
4) 字元特殊檔案s_ischr
5) fifo s_isfif 管道,用於程序間通訊(ipc)
6) 套接字 s_issock 用於程序間的網路通訊
7) 符號鏈結s_islnk
unix 環境高階程式設計 讀書筆記
unix環境高階程式設計 讀書筆記 第8章exit和 exit區別 exit會直接進入核心,不會關閉io流。程序基本控制函式還有 wait,fork,exec。atexit 程式正常退出時呼叫,如果因為signal退出則不能呼叫。功能 註冊函式可以完成一些清理工作,比如全域性log類,可以不設定析構...
Unix環境高階程式設計 讀書筆記一
unix 基礎知識 這一章主要是unix系統的概論以及一些概念的介紹,主要分為10個小節 1 登陸 2 檔案和目錄 3 輸入和輸出 4 程式和程序 5 ansi c 6 出錯處理 7 使用者標識 8 訊號 9 unix時間值 10 系統呼叫和庫函式 這個都比較簡單,就不再重複敘述了。在標頭檔案中定義...
UNIX高階環境程式設計讀書筆記(chapter4)
chapter 4 檔案和目錄 4.0.給定乙個pathname 1 stat函式返回乙個與此命名有關的資訊結構.2 fstat函式獲得已在描述符filedes上開啟的檔案的有關資訊.3 lstat函式類似於stat,但是當命名的檔案是乙個符號鏈結時,lstat返回該符號鏈結的有關資訊,而不是由該符...