資源描述:
《LINUX環(huán)境高級編程-第二講文件.ppt》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Linux環(huán)境高級編程第二講文件的操作第二講文件的操作文件I/O(第三章)文件和目錄(第四章)第二講文件的操作文件I/O(第三章)文件和目錄(第四章)文件I/O文件的基本操作(打開、定位、讀寫、關(guān)閉)I/O效率文件共享其他重要I/O函數(shù)文件I/O文件的基本操作(打開、定位、讀寫、關(guān)閉)I/O效率文件共享其他重要I/O函數(shù)文件操作基本順序打開open創(chuàng)建creat定位lseek讀read寫write關(guān)閉closeopen函數(shù)用于打開或者創(chuàng)建一個(gè)文件函數(shù)原型#includeintopen(constchar*pathname,intofl
2、ag,...)參數(shù)第一個(gè)參數(shù)pathname:要打開或者創(chuàng)建的文件名第二個(gè)參數(shù)oflag:用于指定文件打開模式、標(biāo)志等信息。open函數(shù)第二個(gè)參數(shù)oflag:Linux頭文件已經(jīng)為文件打開模式、標(biāo)志等定義了若干的宏oflag需要指定這些宏宏定義在/usr/include/bits/fcntl.h中在該頭文件中,只讀打開標(biāo)志被定義為:#defineO_RDONLY00open函數(shù)oflag:文件打開模式標(biāo)志以下三個(gè)標(biāo)志必須指定一個(gè)且只能指定一個(gè)O_RDONLY:只讀打開O_WRONLY:只寫打開O_RDWR:讀寫打開其他文件標(biāo)志下面的標(biāo)志是可以選擇的,可
3、通過C語言的或運(yùn)算與文件打開標(biāo)志進(jìn)行組合open函數(shù)oflag其他文件標(biāo)志:O_APPEND:每次寫的數(shù)據(jù)都添加到文件尾O_TRUNC:若此文件存在,并以讀寫或只寫打開,則文件長度為0O_CREAT:若文件不存在,則創(chuàng)建該文件。此時(shí),open函數(shù)需要第三個(gè)參數(shù),用于指定該文件的訪問權(quán)限位(后面描述)O_EXCL:若同時(shí)指定了O_CREAT標(biāo)志,而文件已經(jīng)存在,則會出錯(cuò)??捎糜跍y試文件是否存在open函數(shù)返回值intopen(constchar*pathname,intoflag,…)返回值:整型數(shù)據(jù)成功時(shí),返回文件描述符出錯(cuò)時(shí),返回-1open函數(shù)返回
4、值intopen(constchar*pathname,intoflag,…)返回值:整型數(shù)據(jù)成功時(shí),返回文件描述符出錯(cuò)時(shí),返回-1什么是文件描述符?open函數(shù)返回值intopen(constchar*pathname,intoflag,…)返回值:整型數(shù)據(jù)成功時(shí),返回文件描述符出錯(cuò)時(shí),返回-1什么是文件描述符?已打開文件的索引open函數(shù)返回值intopen(constchar*pathname,intoflag,…)返回值:整型數(shù)據(jù)成功時(shí),返回文件描述符出錯(cuò)時(shí),返回-1什么是文件描述符?已打開文件的索引通過索引找到已打開文件文件描述符文件描述符的
5、本質(zhì)是什么?通過文件描述符怎么樣能找到需訪問的文件?需要了解進(jìn)程打開文件時(shí),內(nèi)核創(chuàng)建或涉及到的一系列數(shù)據(jù)結(jié)構(gòu)進(jìn)程打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfilef_posf_dentry文件標(biāo)志............dentryd_inode索引節(jié)點(diǎn)號文件各信息inode..............進(jìn)程打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct.........進(jìn)
6、程控制塊PCB進(jìn)程打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct.........files.........structtask_struct{.............structfiles_struct*files;.............};進(jìn)程打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct.........files...................files_structfiles_struct該結(jié)構(gòu)體包含了:進(jìn)程已打開文件表進(jìn)程打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct.........files...................
7、....files_structfd[0]fd[1]fd[2]fd[3]files_struct..............structfile**fd;進(jìn)程打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfile..............文件對象:代表一個(gè)已打開的文件進(jìn)程打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct.........files...............
8、........files_structfd[0]fd[1]fd[2]fd[3].......