freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

linux應用編程-資料下載頁

2025-07-17 15:36本頁面
  

【正文】 序及當時的目錄狀態(tài)有關,并不按字母順序排列。 ? 改變進程當前工作目錄: int chdir(const char *pathname)。 int fchdir(int filedes)。 ? 取得當前目錄: char *getcwd(char *buf, size_t size)。 系統調用 I/O接口 ? 打開 /創(chuàng)建: int open(const char *pathname, int oflag,.../*, mode_t mode */)。 ? 關閉: int close(int filedes); ? 讀: ssize_t read(int filedes, void *buff, size_t nbyt s)。 ? 寫: ssize_t write(int filedes, const void * buff, size_t nbytes)。 ? 定位: off_t lseek(int filedes, off_t offset, int whence)。 庫函數 IO接口 ? 打開 /創(chuàng)建: FILE *fopen(const char *pathname, const char *type)。 ? 關閉: int fclose(FILE *fp)。 ? 讀: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp)。 ? 寫: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp)。 ? 定位: int fseek(FILE *fp,long offset,int whence)。 ? 事實上,標準 I/O庫接口是在系統調用函數基礎上構造的,它便于用戶使用,標準 I/O庫處理了很多細節(jié),例如緩存分配,以優(yōu)化長度執(zhí)行 I/O等,這樣使用戶不必擔心如何選擇使用正確的塊長度。但是如果不較深入地了解庫的操作,也會帶來一些問題。 ? 很多 Linux應用程序都使用標準 I/O庫。事實上,編程中是使用系統調用接口,還是標準 I/O庫接口,完全取決于個人的習慣。標準 I/O庫使用了緩存機制,而這種機制是產生很多問題,引起很多混淆的一個領域。因此,在使用標準 I/O庫時要留心,遇到一些奇怪的現象,可以從緩存的角度考慮是否能夠解釋,在 I/O之后適當地調用 fflush,有時候可以幫助我們準確地實現程序的目的。 ? 對于內核而言,所有打開文件都由文件描述符引用。文件描述符是一個非負整數。當打開一個現存文件或創(chuàng)建一個新文件時,內核向進程返回一個文件描述符。當讀、寫一個文件時,用 open或creat返回的文件描述符標識該文件,將其作為參數傳送給 read或 write。 ? 文件描述符的范圍是 0 ~ OPEN_MAX,OPEN_MAX是一個進程能夠打開的最大文件數,系統默認值是 256,函數 setrlimit可以用來改變這個限制,但只有 root權限的進程才能執(zhí)行。 文件描述符 ? 按照慣例, Linux shell使文件描述符 0與進程的標準輸入相結合,文件描述符 1與標準輸出相結合,文件描述符 2與標準出錯輸出相結合。這是 Linux shell以及很多應用程序使用的慣例,而與內核無關。盡管如此,如果不遵照這種慣例,那么很多 Linux應用程序就不能工作。 ? 在 ,幻數 0、 2應被代換成符號常數 STDIN_FILENO、STDOUT_FILENO和 STDERR_FILENO。這些常數都定義在頭文件 中。 int open(const char *pathname, int oflag,.../*, mode_t mode */)。 pathname是要打開或創(chuàng)建的文件的名字。如果整個路徑名超過 PATH_MAX( 4096),或路徑名中的任一文件名超過 NAME_MAX( 255)時,返回出錯 ENAMETOOLONG。 用下列一個或多個常數進行或運算構成 oflag參數 (這些常數定義在 頭文件中 ): ? O_RDONLY 只讀打開 / O_WRONLY 只寫打開 / O_RDWR 讀、寫打開。 ? O_APPEND 每次寫時都加到文件的尾端。 ? O_CREAT 若此文件不存在則創(chuàng)建它。 ? O_EXCL 如果同時指定了 O_CREAT,而文件已經存在,則出錯。這可測試一個文件是否存在,如果不存在則創(chuàng)建此文件成為一個原子操作。 ? O_TRUNC 如果此文件存在,而且為只讀或只寫成功打開,則將其長度截短為 0。 ? O_NONBLOCK 如果 pathname指的是一個 FIFO、一個塊特殊文件或一個字符特殊文件,則此選擇項為此文件的本次打開操作和后續(xù)的 I/O操作設置非阻塞方式。 ? O_SYNC 使每次 write都等到物理 I/O操作完成。 ? 由 open返回的文件描述符一定是最小的未用描述符數字。這一點被很多應用程序用來在標準輸入、標準輸出或標準出錯輸出上打開一個新的文件。例如,一個應用程序可以先關閉標準輸出 (通常是文件描述符 1 ),然后打開另一個文件,事先就能了解到該文件一定會在文件描述符 1上打開。 int creat(const char * pathname, mode_t mode) 。 = open(pathname, O_WRONLY| O_CREAT|O_TRUNC, mode)。 必須說明第三個參數 mode,否則新文件的存取許可權位是不確定的。 open(pathname, O_RDWR| O_CREAT|O_TRUNC, mode)。 ssize_t read(int filedes, void *buff, size_t nbyt s)。 讀操作從文件的當前位移量處開始,在成功返回之前,該位移量增加實際讀得的字節(jié)數。如 read成功,則返回讀到的字節(jié)數。如已到達文件的尾端,則返回 0。有多種情況可使實際讀到的字節(jié)數少于要求讀字節(jié)數: ? 讀普通文件時,在讀到要求字節(jié)數之前已到達了文件尾端。例如,若在到達文件尾端之前還有 30個字節(jié),而要求讀 100個字節(jié),則 read返回 30,下一次再調用 read時,它將返回 0 (文件尾端 )。 ? 當從終端設備讀時,通常一次最多讀一行。 ? 當從網絡讀時,網絡中的緩沖機構可能造成返回值小于所要求讀的字節(jié)數。 ? 某些面向記錄的設備,例如磁帶,一次最多返回一個記錄。 ssize_t write(int filedes, const void * buff, size_t nbytes)。 write出錯的一個常見原因是:磁盤已寫滿,或者超過了對一個給定進程的文件長度限制。 對于普通文件,寫操作從文件的當前位移量處開始。如果在打開該文件時,指定了 O_APPEND選擇項,則在每次寫操作之前,將文件位移量設置在文件的當前結尾處。在一次成功寫之后,該文件位移量增加實際寫的字節(jié)數。 ? 每個打開文件都有一個與其相關聯的 “ 當前文件位移量 ” 。它是一個非負整數,用以度量從文件開始處計算的字節(jié)數。通常,讀、寫操作都從當前文件位移量處開始,并使位移量增加所讀或寫的字節(jié)數。按系統默認,當打開一個文件時,除非指定O_APPEND選擇項,否則該位移量被設置為 0。 off_t lseek(int filedes, off_t offset, int whence)。 對參數 offset的解釋與參數 whence的值有關。 ? 若 whence是 SEEK_SET,則將該文件的位移量設置為距文件開始處 offset個字節(jié)。 ? 若 whence是 SEEK_CUR,則將該文件的位移量設置為其當前值加 offset,offset可為正或負。 ? 若 whence是 SEEK_END,則將該文件的位移量設置為文件長度加 offset,offset可為正或負。 ? 若 lseek成功執(zhí)行,則返回新的文件位移量 ,若出錯為 1 。 ? lseek僅將當前的文件位移量記錄在內核內,它并不引起任何 I/O操作。然后,該位移量用于下一個讀或寫操作。 ? 文件位移量可以大于文件的當前長度,在這種情況下,對該文件的下一次寫將延長該文件,并在文件中構成一個空洞,這一點是允許的。位于文件中但沒有寫過的字節(jié)都被讀為 0。 I/O的效率 ? read和 write函數的第三個參數 nbtyes表示每次 I/O的字節(jié)數,其取值將影響 I/O的效率,一般來說, nbtyes取值大, I/O效率高。 ? 但是,也并不是 nbytes越大越好,其取值到達某一點以后, I/O的效率將達到峰值,再增大 nbytes的取值, I/O的效率也不會提高。 ? 8192 / 65536 有五種功能: ? 復制一個現存的描述符( cmd = F_DUPFD) ? 獲得 /設置文件描述符標記( cmd = F_GETFD或F_SETFD) ? 獲得 /設置文件狀態(tài)標志( cmd = F_GETFL或F_SETFL) ? 獲得 /設置異步 I/O信號接受者( cmd = F_GETOWN或 F_SETOWN) ? 獲得 /設置記錄鎖( cmd = F_GETLK, F_SETLK或F_SETLKW) ftl函數 文件記錄鎖 ? Linux系統中,當多個進程同時編輯一個文件時,該文件的最后狀態(tài)取決于寫該文件的最后一個進程。但是對于有些應用程序,例如數據庫,有時進程需要確保它正在單獨寫一個文件。為了向進程提供這種功能, Linux系統提供了記錄鎖機制。 ? 記錄鎖( record locking)的功能是:一個進程正在讀或修改文件的某個部分時,可以阻止其他進程修改同一文件區(qū)。這里 “ 記錄 ” 其實指的是文件的一個區(qū)域(也可能是整個文件)。 ftl函數用于實現記錄鎖: int ftl(int fd, int cmd, struct flock *lock)。 cmd是 F_GETLK、 F_SETLK或 F_SETLKW。第三個參數是一個指向 flock結構的指針。 struct flock { short int l_type。 short int l_whence。 __off_t l_start。 __off_t l_len。 __pid_t l_pid。 /* Process holding the lock. */ }。 ? l_type所希望的鎖類型: F_RDLCK(共享讀鎖)、F_WRLCK(獨占性寫鎖)或 F_UNLCK(解鎖一個區(qū)域)。 ? 要加鎖或解鎖的區(qū)域的起始地址,由 l_start和l_whence兩者決定。 l_start是相對位移量(字節(jié)),l_whence則決定了相對位移量的起點。這與 lseek函數中最后兩個參數類似。 ? l_len表示區(qū)域的長度。 ? 為了鎖整個文件,通常的方法是將 l_start說明為 0, l_whence說明為 SEEK_SET, l_len說明為 0。 ? 兩種類型的鎖:共享讀鎖( l_type為 L_RDLCK)和獨占寫瑣( L_WRLCK)。加鎖的基本規(guī)則是:多個進程在一個給定的字節(jié)上可以有一把共享的讀鎖,但是在一個給定字節(jié)上的寫鎖則只能由一個進程獨用。如果在一個給定字節(jié)上已經有一把或多把讀鎖,則不能在該字節(jié)上再加寫鎖;如果在一個字節(jié)上已經有一把獨占性的寫鎖,則不能再對它加任何讀鎖。 ? 加讀鎖時,該描述符必須是讀打開; ? 加寫鎖時,該描述符必須是寫打開。 鎖的規(guī)則 記錄鎖的自動繼承和釋放有四條規(guī)則: ? 當一個進程終止時,它所建立的鎖全部釋放 。 ? 任何時候關閉一個描述符時,則該進程通過這一描述符可以訪問的文件上的任何一把鎖都被釋放 。 fd1=open(pathname, ...); read_lock(fd1, ...); fd2=open(pathname, ...); close(fd2); ? 子程序不繼承父進程所設置的鎖。 ? 在執(zhí)行 exec后,新程序可以繼承原執(zhí)行程序的鎖。 ftl函數的三種命令: ? F_GETLK 判斷由 lock所描述的鎖是否被另外一把鎖所排斥 。 ? F_SETLK 設置由 lock所描述的鎖。 ? F_SETLKW 這是 F_SETLK的阻塞版本 。 用 F_GETLK測試能否建立一把鎖,然后用F_SETLK和 F_SETLKW企圖建立一把鎖,不是一個原子操作。 int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len) { struct flock lock。 = type。 = offset。
點擊復制文檔內容
規(guī)章制度相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1