日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unix环境高级编程学习笔记(一)

發(fā)布時間:2025/6/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unix环境高级编程学习笔记(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第二章 文件I/O

1、文件描述符
? 對于內(nèi)核而言,所有打開的文件都通過文件描述符引用,文件描述符是一個非負整數(shù)。
? Unix shell使用文件描述符0表示標準輸入,1表示標準輸出,2表示標準出錯輸出,為了避免在代碼中出現(xiàn)魔數(shù),在<unixtd.h>頭文件中,1,2,3替換為符號常量STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO,文件描述符的變化范圍是0~OPEN_MAX。

2、open函數(shù)
原型:#include<fcntl.h>
??? int open(const char *pathname, int oflag, ...)?? /*僅當創(chuàng)建新文件時才使用第三個參數(shù)*/
?pathname是要打開或創(chuàng)建的文件名字,oflag是參數(shù)選項,可選值有:O_RDONLY(只讀打開,0),O_WRONLY(只寫打開,1),O_RDWR(讀寫打開,2),這些常量定義在<fcntl.h>頭文件中,這3個常量必須指定一個且只能指定一個。下列常量是可選的,O_APPEND(寫時追加尾部),O_CREAT(若不存在則創(chuàng)建,需指定第三個參數(shù)說明文件訪問權(quán)限),O_EXCL(若和O_CREAT一起使用,當要創(chuàng)建的文件已經(jīng)存在就會失敗),O_TRUNC(文件截短為0,需文件存在,且為只寫或讀寫打開),O_NOCTTY(pathname指向終端設(shè)備,不將它作為控制終端),O_NONBLOCK(pathname指向FIFO、塊或字符特殊文件時,設(shè)置非阻塞模式)、O_DSYNC(使每次write等待物理IO操作完成,不包括文件屬性IO的更新),O_RSYNC(讀操作等待寫操作完成)、O_SYNC(每次write等待物理IO操作完成,包括文件屬性IO的更新)???? 注意:Linux將O_DSYNC、O_RSYNC、O_SYNC等同與O_SYNC(其實這些知識點應(yīng)該是自己做實驗發(fā)現(xiàn),而不是等著書本來教你~~)????????????? 返回最小的未使用描述符數(shù)值。

3、creat函數(shù)
原型:#include<fcntl.h>
??? int create(const char* pathname, mode_t mode);等效于open(pathname, O_WRONLY|O_CREAT|O_TRUNC, mode),可以完全用open函數(shù)取代creat函數(shù)

4、close函數(shù)
原型:#include<unistd.h>
??? int close(int filedes);關(guān)閉一個文件時還會釋放該進程加在該文件上的記錄鎖。

5、lseek函數(shù)
作用:顯示的為一個文件設(shè)置偏移量
原型:#include<unistd.h>
???? off_t lseek(int fileds, off_t offset, int whence);
? 對offset的解釋與whence的值有關(guān),當whence為SEEK_SET,則該文件的偏移量為距文件開頭處offset字節(jié)處; 當whence為SEEK_CUR,則該文件的偏移量為當前值加上offset,offset可以為正或負;? 當whence為SEEK_END,則文件偏移量為文件長度加offset,offset可以為正或負。????? 返回新的文件偏移量。
應(yīng)用:1、確定打開文件當前偏移量:off_t currpos;?????? currpos = lseek(fd, 0, SEEK_CUR);
???? 2、確定所涉及的文件是否可以設(shè)置偏移量。如果文件描述符引用的是一個管道、FIFO或網(wǎng)絡(luò)套接字,則lseek返回-1,并將errno設(shè)置為ESPIPE。
???? 3、lseek允許定位到文件長度之后,這樣就會造成文件空洞。使用od(1)命令可以觀察文件的實際內(nèi)容。

6、read函數(shù)
原型:#include<unistd.h>
???? ssize_t read(int filedes, void *buf, size_t nbytes);???成功返回讀到的字節(jié)數(shù),到文件尾返回0,失敗返回-1

7、write函數(shù)
原型:#include<unistd.h>
???? ssize write(int filedes, const void* buf, size_t nbytes);???成功返回已寫字節(jié)數(shù),若出錯返回-1

8、關(guān)于文件共享
?內(nèi)核使用3種數(shù)據(jù)結(jié)構(gòu)表示打開的文件:(1)每個進程都有一個打開文件描述符表;(2)內(nèi)核為所有打開文件維持一張文件表(每個表項包括文件狀態(tài)標志,當前文件偏移量,指向該節(jié)點v節(jié)點指針),(3)一個v節(jié)點結(jié)構(gòu)包括文件類型及i節(jié)點信息(如文件所有者、文件長度、文件所在設(shè)備等等)???????????????? 注:linux沒有v節(jié)點,使用的就是i節(jié)點

9、使用原子操作的場合:1)、lseek+write -> 使用O_APPEND標志 或 使用pread函數(shù)和pwrite函數(shù)

10、dup和dup2函數(shù):用于復(fù)制一個現(xiàn)存的文件描述符
原型:#include<unistd.h>??? int dup(int filedes);????? int dup2(int filedes1, int filedes2);??? dup返回當前可用的最小文件描述符,dup2可用filedes2指定文件描述符,如果filedes已經(jīng)打開則先將其關(guān)閉,這些函數(shù)返回的新文件描述符與filedes共享同一個個文件描述符。

11、sync、fsync、fdatasync函數(shù)
?文件io的傳統(tǒng)實現(xiàn)使用延遲寫策略,增加了性能卻降低了文件跟新速度,這3個函數(shù)的作用就是保證磁盤里實際的文件內(nèi)容和緩沖區(qū)里內(nèi)容一致。?? 注意:系統(tǒng)會周期的自動調(diào)用sync函數(shù)。
原型:#include<unistd.h>??? int fsync(int filedes);??? int fdatasync(int filedes);???? void sync(void);

12、fcntl函數(shù):可以改變已打開文件的性質(zhì)。
原型:#include<fcntl.h>??????? int fcntl(int filedes, int cmd, ...)???? 出錯返回-1
功能:(1)、復(fù)制現(xiàn)有文件描述符(cmd=F_DUPFD)??? (2)、獲得設(shè)置文件描述符標志(cmd=F_GETFD或cmd=F_SETFD)? (3)、獲得或設(shè)置文件狀態(tài)標志(cmd=F_GETFL或cmd=F_SETFL)?? (4)、獲得設(shè)置異步IO所有權(quán)(cmd=F_GETOWN或F_SETOWN)?? (5)、獲得設(shè)置記錄鎖(cmd=F_GETLK、F_SETLK、F_SETLKW)
注意:dup(filedes);等價于fcntl(filedes, F_DUPFD, 0);???????? dup2(filedes1, filedes2);等價于close(filedes2);??? fcntl(filedes1, F_DUPFD, filedes2);

13、ioctl函數(shù):是IO操作的雜物箱,不能用本章中其他函數(shù)表示的IO操作通常都能用ioctl表示。
原型:#include<unistd.h>?? #include<sys/ioctl.h>???? #include<stropts.h>
int? ioctl(int filedes, int request, ...)???????? 若出錯,返回-1

14、/dev/fd:該目錄下為Linux打開文件描述符的映射。

轉(zhuǎn)載于:https://www.cnblogs.com/Just-do-it110/archive/2011/07/30/2121946.html

總結(jié)

以上是生活随笔為你收集整理的Unix环境高级编程学习笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久爱影视 | 久久久精品99 | 日日摸夜夜添夜夜添高潮喷水 | 亚洲成人自拍网 | 亚洲欧美国产另类 | 日本在线视频免费观看 | 日韩不卡一二区 | 日韩av毛片 | 日韩精品一 | 日日夜夜一区二区 | 色欲色香天天天综合网www | 欧美理伦片在线播放 | 亚洲在线观看免费视频 | 99久久久国产精品无码免费 | 久久香焦 | 欧美特级黄色大片 | 男人天堂视频在线观看 | 国产绿帽刺激高潮对白 | www.av在线播放 | 亚洲综合在线网 | 在线观看久| 国产成人欧美一区二区三区91 | 深夜天堂 | wwwxxx在线| 亚洲AV无码国产精品午夜字幕 | 色妹av| av国产成人| 老司机福利精品 | 国产欧美在线观看视频 | 青青草青娱乐 | 亚洲国产精华液网站w | 亚洲av无码专区首页 | 国产寡妇色xxⅹ交肉视频 | 久久国产欧美日韩精品 | 国产传媒av | 操极品美女 | 都市激情校园春色亚洲 | 少妇无套高潮一二三区 | 午夜av影院| 亚洲天堂偷拍 | 国产又黄又大又粗的视频 | 欧美性猛交7777777 | 好吊色在线视频 | 99热首页| 亚洲成人 av| 国产成人久久精品77777综合 | 日本一区不卡视频 | 久久精品国产大片免费观看 | 91重口味| xxxxxhd亚洲人hd | 亚洲天堂美女视频 | 欧美一区二区三区日韩 | 国产欧美日韩专区 | 天天插天天狠 | 亚洲成人免费视频 | 亚洲黄色网络 | 黄色网址最新 | 99视频精品在线 | 丁香婷婷在线 | 国产人妻人伦精品1国产丝袜 | 久色视频在线观看 | 亚洲精品久久久蜜桃网尤妮丝 | 成人在线观看一区二区 | 男人插女人网站 | 日韩国产欧美一区 | 狠狠草视频| 青青草视频网站 | 亚洲综合欧美日韩 | 亚洲啪啪网站 | 青青草华人在线 | 激情伊人 | 国产一区午夜 | 天天透天天操 | 午夜爽爽爽视频 | 五月天婷婷影院 | 亲嘴扒胸摸屁股免费视频日本网站 | 日韩一级影视 | 91超碰在线| 91美女片黄 | 玖玖综合网 | 麻豆传媒网站在线观看 | 天天爽夜夜爽夜夜爽 | 国产高潮国产高潮久久久91 | 99精品欧美一区二区 | 免费av观看网站 | 色老头在线视频 | 欧美日韩在线观看成人 | 五月婷婷狠狠干 | 91精产国品一二三 | 日韩看片 | 99久久婷婷国产一区二区三区 | 色一情一乱一区二区三区 | 精品人妻一区二区三区免费 | 日韩一级二级视频 | 亚洲一区二区综合 | 欧亚一区二区三区 | 国产欧美在线一区 | 国产激情毛片 | 中文字幕蜜臀 |