日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.日本精品 | 野外做受又硬又粗又大视频√ | 天天干 夜夜操 | 高清一区二区三区四区 | 高清一区在线观看 | 懂色aⅴ国产一区二区三区 亚洲欧美国产另类 | 国产福利一区二区三区视频 | 亚洲剧情在线 | a黄视频| 五月网 | 免费的黄色小视频 | 日韩新片王网 | 狠狠伊人 | 黄色国产视频网站 | 成年人的黄色片 | 国产在线123| 欧美激情精品久久久久久 | 污网址在线观看 | 亚洲第一黄 | 五月天婷婷伊人 | 最新国产露脸在线观看 | 免费黄色资源 | 欧美日韩一区二区三区在线播放 | 亚洲色图 校园春色 | 日韩欧美的一区二区 | 无码人妻aⅴ一区二区三区69岛 | 五月丁香综合激情六月久久 | hd丰满圆润的女人hd | 国产精品99一区二区三区 | 成人福利视频网 | 亚洲7777| 欧美另类tv | 什么网站可以看毛片 | 青青草免费观看视频 | 欧美乱大交xxxxx春色视频 | 91丝袜国产在线播放 | 美女被草出白浆 | 特黄特黄视频 | 亚洲精品国产精品乱码不卡 | 污到下面流水的视频 | 日韩视频一区 | 国产亚洲女人久久久久毛片 | 秋霞福利 | 午夜国产小视频 | 吻胸摸激情床激烈视频大胸 | 国产精品无码人妻一区二区在线 | 农村妇女毛片精品久久久 | 久久久久久av无码免费网站 | 麻豆精品一区二区三区 | 欧美区一区二区 | 少妇太紧太爽又黄又硬又爽小说 | 一区二区三区高清不卡 | 又黄又免费的网站 | 国产一区二区黑人欧美xxxx | 天天视频亚洲 | 91精品国产高清一区二区三密臀 | 亚洲狠狠干 | 欧美日韩免费一区二区三区 | 日韩欧美91 | 欧美 日韩 国产 亚洲 色 | 91avcom| 美女毛片视频 | 桃花色综合影院 | avtt香蕉久久| 黄色a级片视频 | 午夜婷婷丁香 | 正在播放一区 | 国产成人在线视频播放 | 青青草草视频 | 日韩精品偷拍 | 中文字幕一区二区人妻视频 | 日韩精品视频在线播放 | 日本黄色短片 | 白石茉莉奈番号 | 逼特逼在线视频 | 人成在线免费视频 | 欧美国产91| 中文字幕在线永久 | 午夜婷婷在线观看 | 91在线一区二区三区 | 中文日韩欧美 | 日韩一区二区三免费高清在线观看 | 在线视频 一区二区 | 日韩欧美亚洲国产精品字幕久久久 | 欧美成人三级视频 | 中文日韩欧美 | 国模人体私拍xvideos | 久久久久久久久久久综合 | 午夜剧场免费看 | 欧美特级特黄aaaaaa在线看 | 一级久久久久久 | 久久久一区二区三区四区 | 久久久久亚洲av成人人电影 | 亚洲激情三区 | 日批免费在线观看 | 久久精品麻豆 | 亚洲综人网 | 欧美中文字幕一区 | 男人喷出精子视频 |