unix環境高階程式設計 讀書筆記

2022-07-27 11:45:12 字數 2640 閱讀 4686

檔案

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返回該符號鏈結的有關資訊,而不是由該符...