操作系統-文件系統_第1頁
操作系統-文件系統_第2頁
操作系統-文件系統_第3頁
操作系統-文件系統_第4頁
操作系統-文件系統_第5頁
已閱讀5頁,還剩115頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1文件系統2本章教學目標理解文件的概念理解文件目錄的概念和組織方式理解文件的邏輯結構和組織方式掌握文件的物理結構和組織方式理解文件空間管理的方法理解Linux文件系統中文件系統調用文件系統的問題文件邏輯上的組織方式?

字節流形式?固定記錄長度?可變記錄長度文件的訪問模式

順序訪問?隨機訪問?眾多的文件如何有序地進行組織和管理?

文件目錄結構文件如何進行共享和保護?

訪問控制權限文件在物理磁盤上如何存儲?如何分配物理磁盤的空間?

給定文件名和邏輯記錄號或邏輯塊號,如何轉換到文件的物理位置?34大綱文件與文件系統文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統調用的實現5文件系統文件系統的功能:文件的按名存取文件目錄的建立和維護文件的查找和定位文件存儲空間的分配和管理提供文件的存取方法和文件存儲結構實現文件的共享、保護和保密提供一組易用的文件操作和命令提供與設備管理交互的統一接口6文件的概念文件是操作系統對所存儲的信息對外提供的統一邏輯視圖文件由是由文件名標識的一組存儲在二級存儲設備上的信息的集合從用戶的角度,文件是邏輯二級存儲設備最小的分配單元用戶按名存取文件,操作系統負責文件名到物理存儲位置的映射文件是由位串、連續的字節、行、或記錄構成的集合,文件內容的含義取決于文件創建者7文件類型按用途分系統文件庫文件用戶文件按保護級別分只讀文件讀寫文件不保護文件按數據類型分源程序文件目標文件可執行文件8UNIX/Linux的文件類型普通文件ASCII文件二進制文件目錄文件由文件目錄所構成的用來維護文件系統結構的系統文件特別文件指各類外部設備文件將所有I/O設備統一在文件系統下9文件名與文件類型各個操作系統的文件命名規則略有不同文件名一般由文件名稱和擴展名稱組成,兩者中間以”.”分割,如”myfile.doc,command.exe”文件名用于識別文件擴展名用于區分文件類型10文件名/filefoowho

date

.profile

由字符(除了/)構成的字符串,有可能是大小寫敏感的1112文件屬性文件名唯一用戶可讀的信息文件標識文件系統內的唯一標識類型普通文件、目錄文件、設備文件位置指向文件的位置,包括設備以及設備上的位置大小當前長度和允許的最大長度權限訪問控制信息,例如誰可以讀、寫、執行文件等時間文件的創建時間,最后修改時間,最后使用時間等13文件屬性與文件相關的所有信息保存在文件目錄結構中文件目錄通常包含文件名和文件標識兩部分文件標識用于定位其它屬性14文件操作創建文件(create)從文件系統中找到存放文件的空間(空間分配問題)在目錄中為該文件添加新目錄項寫文件(write)

給出文件名和需要寫入文件的信息文件系統查找目錄,從文件目錄項中找到文件的位置文件系統保存了一個寫指針,指出下一個寫操作開始的位置讀文件(read)給出文件名以及內存地址,用于存放讀出的下一個文件塊文件系統查找目錄,找到對應的文件目錄項系統保存一個讀指針,指出下一個讀操作開始的位置讀指針每個進程都不一樣15文件操作(cont)重定位(repositioning,seek)查找文件目錄,找到對應的目錄項,將當前文件位置指針修改為給定的值文件重定位并不涉及真正的I/O操作刪除文件(delete)

查找文件目錄,找到給定文件名對應的目錄項釋放文件所占用的所有空間刪除對應的目錄項清空文件刪除文件內容,但保留其屬性(長度除外)16文件操作(cont)追加(appending)重命名(renaming)拷貝(copy)獲取和修改文件屬性(get/setattribute)17文件存取方法順序存取存取操作在上次的基礎上進行系統設置讀寫指針,指向要讀出或寫入的字節位置或記錄位置。直接存取快速地以任意次序直接讀寫某條記錄,對文件讀/寫的次序沒有任何限制索引存取基于索引文件的存取方法用戶提供記錄名或記錄鍵,按名搜索,找到所需要的記錄索引存取(續)例如,一個零售商品價格的文件每條記錄包含兩個部分UPC(商品代碼)--10字符長

價格—6個字符存儲假設有1200000條記錄則文件大小為16*1200000=19.2M如何快速地讀取商品代碼為”2353765401”的價格?18索引存取(續)假設物理塊大小為1024字節,則每個塊能存放1024/16=64個記錄一共需要18750個物理塊如果文件記錄按無序的方式存放,則平均需要檢索600000條記錄才能找到如果文件記錄按順序存放,并且為文件建立索引,索引的下標表示邏輯塊號,而索引表項的值存放的是該邏輯塊里第一條記錄的UPC192000013200000100012500….20534654052457736491…..23537654010001320000,100.05…….0100012500,203.13…….…….2053465405,511.89…….2353765401,243.00…….2457736491,113.04…….…..64條記錄索引2122大綱文件與文件系統文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統調用的實現23文件控制塊(FCB)文件系統為每個文件建立的唯一的管理數據結構,一般包括:文件標識和控制信息文件名、用戶名、文件存取權限、訪問控制權限、文件類型等;文件邏輯結構信息記錄類型、記錄個數、記錄長度、成組因子等;文件物理結構信息文件所在設備名、文件物理結構類型、記錄存放在輔存中的塊號或文件信息首塊盤塊號,文件索引的位置等;文件使用信息共享文件的進程數,文件修改情況,文件最大長度和當前大小文件管理信息文件建立日期,最近修改日期,最近訪問日期等;24FCB基于FCB可以方便地實現文件的按名存取創建文件時,為其建立一個FCB,用來記錄文件的屬性信息存取此文件時,先找到其FCB,再找到文件信息盤塊號或首塊物理位置為了加快文件的查找速度,通常將FCB集中起來進行管理,組成文件目錄25文件目錄文件目錄包含兩種目錄項:文件的FCB

描述子目錄的目錄文件的FCB全部由目錄項構成的文件稱為目錄文件目錄項的格式按統一標準定義目錄文件至少包含兩個目錄項當前目錄項”.”

父目錄項”..”文件目錄的基本功能將文件名轉換成此文件信息在磁盤上的物理位置有效地組織和管理文件26目錄/fileetcusr

dmr

bin27文件路徑/file/usr/wm4/.profile

由從根目錄開始沿著目錄結構一直到文件的目錄項和文件名順序組合而成28工作目錄/file默認情況下文件名所處的目錄29相對路徑/file

./.profile

../wm4/.profile

相對于當前工作目錄的路徑

..referstoparentdirectory

.referstocurrentdirectory30目錄結構單級目錄結構兩級目錄結構樹形目錄結構DAG結構圖結構31單級目錄結構所有用戶都共用一個目錄缺點:名字易于重復用戶沒有獨立的目錄,不利于共享和保護32兩級目錄結構33純樹形目錄結構目錄可以有任意多的層次目錄可以包含子目錄,也可以包含文件每個文件只有一個父目錄文件共享較為困難34DAG目錄結構一個文件可以有多個父目錄能較方便地實現文件的共享目錄結構的維護較復雜需要為每個文件維護一個引用計數,以記錄文件的父目錄個數,僅當引用計數值為1時,刪除操作才真正刪除文件35DAG目錄結構示意圖36文件共享的實現方式LINUXHardlinkSymboliclinkWindows快捷方式37HardLink/bobalicehomebinxxyy當前工作目錄為bob$ln../alice/xxyy38SymbolicLink/bobalicehomebinxxyy/home/alice/xx當前工作目錄為bob$ln–s../alice/xxyy39任意圖結構目錄可能包含環查找比較困難40Linux/Unix的目錄項結構將文件名和文件屬性分離,其它信息單獨組成一個數據結構,稱為索引節點inode,其位置由inode號標識每個文件或子目錄都在父目錄文件中有一條目錄項每個目錄項包含兩個字段

文件名

i-node號:指出存放文件屬性信息的inode節點號每個磁盤塊可以存放幾十個基本目錄項41

I-node結構modeownertimestampSizeBlockcountDirectblocks0-9DoubleindirectTripleindirectSingleindirectDatablockDatablockDatablockIndirectblock...DatablockDatablockDatablock...IndirectblockIndirectblockIndirectblock...Referencecount42inodeUnix/Linux操作系統對由文件目錄項組成的目錄文件和普通文件同等對待,均存放在磁盤中文件系統中的每個文件都有一個磁盤inode與之對應,這些inode存放在磁盤的inode區找到文件的inode就能找到文件在物理磁盤中的存放位置43目錄項、inode和數據塊的關系磁盤文件卷inode文件名inodeinode文件名inode磁盤文件0#1#2#……數據塊數據塊目錄塊…數據塊數據塊目錄塊引導塊磁盤inode區磁盤信息區:目錄塊和數據塊inode……inode…超級塊44引導塊位于文件卷最開始的第一扇區,該512字節是文件系統的引導代碼,為根文件系統所特有,其他文件系統這512字節為空超級塊位于文件系統第二扇區,緊跟引導塊之后,用于描述本文件系統的結構和管理信息。如inode節點所占盤塊數、文件數據所占的盤塊數等磁盤inode區位于超級塊之后,長度由超級塊中的inode所占盤塊數決定每個inode用于描述文件屬性中除文件名之外的屬性,包括文件的長度、屬主、物理數據塊號等;數據塊分為目錄文件數據塊和普通文件數據塊

目錄文件數據塊中存放的是目錄項的集合普通文件數據塊存放的是文件數據45Linux中文件目錄的檢索(a)用戶角度目錄結構usrmyfilxyzhomefei1myfile.cfei3fei2Afei4fei5testfile.cB685.100

..941A270fei1250fei2770fei3270.685..302myfile.c250.685..302myfile.c770.685..345fei4565fei5345

.770..302testfile.c565.770..824B

不同角度的目錄結構(b)系統角度目錄鏈接46大綱文件與文件系統文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統調用的實現47文件組織與數據存儲邏輯結構從用戶的觀點出發,研究用戶概念中的抽象的信息組織方式用戶可以觀察到的、可加以處理的數據集合相關數據的集合稱為邏輯文件物理結構邏輯文件在物理存儲空間中的存放方法和組織關系物理文件被看成是相關物理塊的集合主存與物理存儲器進行信息交換的物理單位是塊48文件的邏輯結構流式文件又稱為無結構文件文件內的數據不再分記錄,而是看成字節流也可以看作是記錄就為1個字節的記錄式文件大多數現代操作系統如WINDOWS,UNIX,LINUX只提供流式文件由應用程序自行根據字節重構對應用有意義的記錄49文件的邏輯結構記錄式文件文件是一組記錄的集合例如職工的工資記錄構成工資文件從操作系統的角度看,邏輯記錄是文件內獨立的最小信息單位,每次總是為使用者存儲、檢索或更新一條邏輯記錄記錄式文件的記錄組織和使用方法記錄式順序文件記錄順序編號,并被順序訪問記錄式索引文件用索引表根據記錄鍵快速查找到相應的記錄在文件中的位置50成組與分解邏輯記錄與物理塊之間的對應關系一條邏輯記錄被存放到物理存儲器時,可能會占用一塊或多塊,或者一個物理塊可以包含多條邏輯記錄成組:若干邏輯記錄合并成一組,寫入一塊,每塊中的邏輯記錄的個數稱為成塊因子分解:從讀進內存緩沖區的物理塊中分解出邏輯記錄的過程51記錄成組與分解的處理過程邏輯記錄物理存儲區邏輯記錄1邏輯記錄2邏輯記錄3邏輯記錄K…物理記錄系統緩沖區用戶工作區52記錄格式記錄格式就是記錄內數據的排列方式記錄格式分為:定長記錄所有邏輯記錄具有相同的長度記錄中的所有數據項的相對位置固定變長記錄邏輯記錄長度不等每條邏輯記錄的長度在處理之前能預先確定跨塊記錄記錄長度大于塊長53記錄鍵能用于區別同一文件中其它邏輯記錄的數據項,也稱為關鍵字或鍵能唯一標識某條邏輯記錄的鍵稱為主鍵54大綱文件與文件系統文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統調用的實現55文件的物理結構文件系統需要提供將邏輯文件存儲到物理存儲設備上去的組織方式邏輯上連續的文件是否需要連續存放在物理存儲介質上?文件的存取速度?兩類方法計算法通過對記錄鍵進行計算,從而轉換成對應的物理地址指針法設置專門的指針,指明相應記錄的物理地址或表達各個記錄之間的關聯56文件的物理結構具體的文件物理結構和組織方法順序文件/連續文件連接文件

FAT

索引文件57順序文件/連續文件文件中邏輯上連續的信息存放到物理介質的相鄰物理塊上形成順序結構文件控制塊FCB中保存第一個物理塊的地址和占用的總物理塊數可以對順序文件按記錄進行排序,成為有序的順序文件優點:順序存取和隨機存取時速度較快缺點建立文件之前需要確定文件的長度,以分配存儲空間修改、插入和添加文件記錄較為困難對于變長記錄的處理很困難會產生外部碎片5859連接文件文件在物理上被組織成物理塊的鏈表,分配給一個文件的物理塊在空間上可能是分散的文件控制塊FCB給出第一個物理塊的地址每個塊的連接字指出文件的下一個物理塊位置當連接字內容為某個特殊值時,表示文件至本塊結束pointerblock=6061連接文件(cont)優點:文件的邏輯順序獨立于存儲空間的物理塊順序易于記錄的增、刪、改易于文件擴充缺點

僅適宜于順序存取

隨機存取速度慢,需要從頭開始查找連接字與數據混放,破壞了數據塊的完整性連接字需要占用額外的空間62FAT連接文件的一個變種,用于克服連接字和數據混放的缺點,提高隨機存取的速度把連接指針從數據塊中分離出來,單獨建立一個指針數組PTRS[n],n為組成磁盤連接文件物理塊的總塊數每個PTRS[i]對應于一個物理塊i,如果物理塊j在文件中緊跟物理塊i之后,則PTRS[i]=j文件控制塊FCB存放文件第一個物理塊的塊號指針數組保存在磁盤的一個專門區域,如0磁道的前k個塊為了縮短定位文件信息塊所需要的時間,可以把這些指針連續盤塊裝進主存或高速緩存。假設4字節記錄磁盤塊號,塊大小為1K,則當k=100時,可以記錄256×100=25600個數據塊的磁盤塊號,即25,600,000字節大小的存儲空間6364索引文件為每個文件建立索引,給出邏輯記錄或邏輯塊號到物理塊號的映射索引表可以存放在文件控制塊中,也可以讓索引表作為物理塊單獨駐留在磁盤的任意位置,而FCB中僅包含索引表的地址優點隨機存儲速度快便于信息的增、刪、改缺點索引表的空間開銷6566索引文件(cont)當記錄數目很多/文件很大時,索引表本身要占用很多物理塊,則查找某個記錄鍵所對應的索引項時,可能需要查找多個物理塊若索引表占用n塊,則平均要載入n/2個物理塊,才能找到所需記錄的物理地址可以建立索引的索引,稱為二級索引;或索引的索引的索引,即三級索引67UNIX/LINUX中的多級索引結構每個FCB中規定了13個索引項前10項為直接索引11、12項為一次間接尋址13項為二次間接尋址小文件無需二次索引,超大文件可以用3級索引,文件最大可以到11億字節68UNIX/LINUX中的多重索引結構6970大綱文件與文件系統文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統調用的實現71文件空間管理的作用輔助存儲空間的有效分配和釋放創建和擴充文件時,決定分配哪些磁盤塊是很重要的,這會影響磁盤訪問次數刪除文件和縮短文件時,需要回收磁盤塊隨著分配和回收,可能會出現碎片72常用磁盤空間管理方法位示圖空閑區表空閑塊鏈成組空閑塊鏈73位示圖法磁盤空間由固定大小的塊組成,可方便地使用位示圖管理。每一字位對應于一個物理塊,字位值為1表示被占用,0表示空閑。優點:每個盤塊僅需一比特來標識若盤塊長為1KB,則位示圖開銷為0.012%74空閑區表法常常用于連續文件,將空閑區存儲塊的位置及其連續空閑的塊數構成一張表類似于內存管理中的連續存儲管理分配時,依次掃描空閑區表,尋找合適的空閑塊并修改登記項;刪除文件并釋放空閑區時,把空閑位置及連續空閑區長度填入空閑區表,出現鄰接的空閑區時,還需執行合并操作搜索算法:最先適應最佳適應最壞適應等75空閑塊鏈把所有空閑塊連接在一起,系統保持指針指向第一個空閑塊,每一空閑塊中包含指向下一個空閑塊的指針申請一個空閑塊時,從鏈頭取一塊并修改系統指針;刪除時釋放占用塊,使其成為空閑塊并掛到空閑鏈上76UNIX/Linux空閑塊成組連接法(1)存儲空間分成512字節一塊。假定文件卷啟用時共有可用空閑塊338塊,編號從12至349。每100塊劃分一組,每組第一塊登記下一組空閑塊的物理盤塊號和空閑總數。77

…………空閑塊數395049…1212空閑塊數100150149…51空閑塊數100250249…151空閑塊數1000349…251分配算法IF空閑塊數=1THENIF第一個單元=0THEN等待

ELSE復制第一個單元對應塊到專用塊,并分配之ELSE分配第(空閑塊數)個單元對應塊,空閑塊數減1歸還算法IF空閑塊數<100THEN專用塊的空閑塊數加一,第(空閑塊數)個單元置歸還塊號ELSE復制專用塊到歸還塊,專用塊的空閑塊數置一,第一單元置歸還塊號(磁盤)專用塊(主存)專用塊UNIX/Linux空閑塊成組連接法(2)78大綱文件與文件系統文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統調用的實現79文件系統調用的實現創建和刪除文件打開和關閉文件讀/寫文件文件共享主存映射文件80文件系統內部結構主存i_numberi_counti_numberi_count…i_addr[40]

…i_numberi_count…i_addr[40]f_flagf_count…f_inode

file的指針fp

…用戶打開文件表files_struct文件描述符fd系統打開文件表file_struct一個打開文件的file活動inode活動inode主存活動inode表磁盤磁盤文件卷0#1#2#……………引導塊超級塊磁盤inode區磁盤信息區:目錄塊和數據塊磁盤文件81主存活動inode表磁盤inode記錄文件的屬性和相關信息,文件訪問過程會頻繁地用到它,因此頻繁地訪問輔存極不經濟Linux/Unix在內核開辟一張專用表,用于存儲經常訪問的磁盤inode,以及一些動態信息,稱為主存inode表/活躍inode表82主存活動inode表

主存inode表包含:

磁盤inode的所有信息,如物理塊地址主存inode的狀態

Inode是否上鎖

Inode數據是否改變

文件數據是否改變

文件系統的邏輯設備號.inode號

引用數:i_count83系統打開文件表

內核有一個系統打開文件表,用于存放文件訪問信息

系統打開文件表中的每一個表項包括:

指向主存inode表的指針

下一次讀/寫文件的位移

打開進程的訪問權限

引用計數:f_count84用戶打開文件表每個進程有一個用戶文件描述符表,用于描述所有打開的文件

每個用戶文件打開表中的表項都指向一個內核系統文件打開表中的表項三個特殊的表項

Entry0:標準輸入Entry1:標準輸出Entry2:標準錯誤輸出85文件系統調用

--文件的創建

系統調用C語言格式為:

intfd,mode;char*filenamep;fd=create(filenamep,mode);

創建兼有打開功能86文件系統調用

--文件的創建①為新文件分配索引節點和活動索引節點,并把索引節點編號與文件分量名組成新目錄項,記到目錄中。②在新文件所對應的活動索引節點中置初值,如置存取權限i_mode,連接計數i_nlink等。③分配用戶打開文件表項和系統打開文件表項,置系統打開文件表項初值,如讀寫位移f_offset清0。④把各表項及文件對應的活動索引節點用指針連接起來,把文件描述字fd返回給調用者。87文件系統調用

--文件的刪除

刪除的任務:把指定文件從所在的目錄文件中去除。如果沒有連接用戶(i_link為1),還要把文件占用的存儲空間釋放。系統調用形式為:unlink(filenamep)。在執行刪除時,必須要求用戶對該文件具有“寫”操作權。88文件系統調用

--文件的打開

調用方式為:

intfd,mode;char*filenamep;fd=open(filenamep,mode);89文件系統調用

--文件的打開①檢索目錄,把它的外存索引節點復制到活動索引節點表。②根據參數mode核對權限,如果非法,則這次打開失敗。③當“打開”合法時,為文件分配用戶打開文件表項和系統打開文件表項,并為系統打開文件表的表項設置初值。通過指針建立這些表項與活動索引節點間的聯系。把文件描述字,即用戶打開文件表中相應文件表項的序號返回給調用者。90文件系統調用

--文件的打開如果執行open()時,其它用戶已經打開了同一文件,則活動inode表中已經有此文件的inode,則無需執行第①步的inode復制工作但需要將活動inode中的i_count加1i_count反映通過不同的系統打開文件表項來共享同一個活動inode的進程數目是執行文件關閉操作時,能否釋放活動inode節點的依據。91#include<stdio.h>#include<sys/types.h>#include<fcntl.h>main(){intfd1,fd2,fd3;printf("Beforeopen...\n");fd1=open(

"/etc/passwd",O_RDONLY);fd2=open("./openEx1.c",O_WRONLY);fd3=open(

"/etc/passwd",O_RDONLY);printf("fd1=%dfd2=%dfd3=%d\n",fd1,fd2,fd3);}$ccopenEx1.c-oopenEx1$openEx1Beforeopen...fd1=3fd2=4fd3=5$92…CNT=2/etc/passwdCNT=1./openEx2.c主存活動inode表文件描述符表指針用戶區用戶打開文件表01234567.........CNT=1RCNT=1W...CNT=1R系統打開文件表.........93文件系統調用

--文件的關閉

調用方式為:

intfd;close(fd);94文件系統調用

--文件的關閉①根據fd找到用戶打開文件表項,再找到系統打開文件表項,釋放用戶打開文件表項。②把對應系統打開文件表項中的f_count減1,如果非0,說明進程族中還有其它進程共享這一表項,不用釋放直接返回;否則釋放表項,并找到與之連接的主動活動inode。③把活動inode中的i_count減1,若不為0,表明還有用戶進程正在使用該文件,不用釋放而直接返回;否則在把該活動inode中的內容復制回磁盤上的相應inode后,釋放該活動inode。95文件系統調用f_count和i_count反映了進程動態共享一個文件的兩種方式系統打開文件表中的f_count反映不同進程通過同一個系統打開文件表項共享一個文件的情況進程使用相同的位移指針f_offset共享文件

如fork()系統調用產生的父子進程主存活動inode中的i_count反映不同進程通過不同系統打開文件表項共享一個文件的情況進程使用不同的位移指針f_offset共享文件96文件系統調用

--讀文件

調用的形式為:

intnr,fd,count;charbuf[];nr=read(fd,buf,count);97文件系統調用

--讀文件

系統根據f_flag中的信息,檢查讀操作合法性;若合法,按活動i_node中i_addr指出的文件物理塊存放地址,從文件當前的位移量f_offset處開始,讀出所要求的count個字節,存放到系統緩沖區中,然后再送到buf指向的用戶主存區中。98fdfp…f_flag(r/w)f_count(1)f_offset(0)f_inodei_mode(x)i_nlink(1)i_addr(40)系統打開文件表活動inode用戶打開文件表物理塊99#include<stdio.h>#include<sys/types.h>#include<fcntl.h>main(){intfd1,fd2,fd3;charbuf1[20],buf2[20];buf1[19]='\0';buf2[19]='\0';printf("=======\n");fd1=open("/etc/passwd",O_RDONLY);

read(fd1,buf1,19);printf("fd1=%dbuf1=%s\n",fd1,buf1);

read(fd1,buf2,19);printf("fd1=%dbuf2=%s\n",fd1,buf2);printf("=======\n");}$ccopenEx2.c-oopenEx2$openEx2=======fd1=3buf1=root:x:0:1:Super-Usfd1=3buf2=er:/:/sbin/shdaemo=======$100#include<stdio.h>#include<sys/types.h>#include<fcntl.h>main(){intfd1,fd2,fd3;charbuf1[20],buf2[20];buf1[19]='\0';buf2[19]='\0';printf("======\n");fd1=open("/etc/passwd",O_RDONLY);

fd2=open("/etc/passwd",O_RDONLY);read(fd1,buf1,19);printf("fd1=%dbuf1=%s\n",fd1,buf1);

read(fd2,buf2,19);printf("fd2=%dbuf2=%s\n",fd2,buf2);printf("======\n");}$ccopenEx3.c-oopenEx3$openEx3======fd1=3buf1=root:x:0:1:Super-Usfd2=4buf2=root:x:0:1:Super-Us======$兩次系統調用,創建了兩個系統打開文件表項,每個都有自己的讀寫位移指針101…CNT=2/etc/passwd...主存活動inode表用戶打開文件表指針用戶區用戶打開文件表01234567.........CNT=1R......CNT=1R系統打開文件表.........102文件系統調用

--寫文件

調用的形式為:

nw=write(fd,buf,count);buf是信息傳送的源地址,即把buf所指向的用戶主存區中的信息,寫入到文件中。103文件系統調用

--文件的隨機存取系統調用的形式為:

longlseek;longoffset;intwhence,fd;lseek(fd,offset,whence);104文件系統調用

--文件的隨機存取

fd:文件描述字fd必須指向一個用讀或寫方式打開的文件offset:當whence是0時,則f_offset被置為offset,即設置絕對位移當whence是1時,則f_offset被置為文件當前位置加上offset,即設置相對位移105文件共享文件的靜態共享文件的動態共享文件的符號鏈接共享

106文件的靜態共享一個文件同時屬于多個目錄,但實際上文件僅有一處物理存儲文件鏈接優點:節省空間文件的修改對任何用戶都可見,保證文件的一致性107文件的靜態共享系統調用形式為:

char*oldnamep,*newnamep;link(oldnamep,newnamep);①檢索目錄找到oldnamep所指向文件的索引節點inode編號。②再次檢索目錄找到newnamep所指文件的父目錄文件,并把已存在文件的索引節點inode編號與別名構成一個目錄項,記入到該目錄中去。③把已存在文件索引節點inode的連接計數i_nlink加“1”。108usrmyfilxyzhomefei1myfile.cfei3fei2Afei4fei5testfile.cB685.100

..941A270fei1250fei2770fei3270.685..302myfile.c250.685..302myfile.c770.685..345fei4565fei5345

.770..302testfile.c565.770..824Blink(“/home/fei1/myfile.c”,“/home/fei2/myfile.c”);link(“/home/fei1/myfile.c”,“/home/fei3/fei4/testfile.c”);109文件的靜態共享文件解除鏈接調用形式為:

unlink(namep)解除鏈接與文件刪除執行的是同一系統調用代碼。刪除文件是從文件主角度講的,解除文件連接是從共享文件的其他用戶角度講的。都要刪去目錄項,把i_nlink減1,不過,只有當i_nlink減為0時,才真正刪除文件。

110文件的動態共享文件動態共享是系統中不同的用戶進程或同一用戶的不同進程并發訪問同一文件。這種共享關系只有當用戶進程存在時才可能出現,一旦用戶的進程消亡,其共享關系也就自動消失。文件的每次讀寫由一個讀/寫位移指針指出要讀寫的位置。現在的問題是:應讓多個進程共用同一個讀/寫位移,還是各個進程具有各自的讀寫位移呢?111文件的動態共享同一用戶父、子進程協同完成任務,使用同一讀/寫位移,同步地對文件進行操

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論