前兩天跟老師去北京開了乙個會議,好久沒學習了,今天才回學校,其中的辛酸就不說了。來正文:
1、什麼是檔案共享
(1)、檔案共享就是同乙個檔案(同乙個檔案指的是同乙個inode,同乙個pathname)被多個獨立的讀寫體(幾乎可以理解為多個檔案描述符)去同時(乙個開啟尚未關閉的同時,另乙個去操作)操作。
(2)、檔案共享的意義有很多:例如我們可以通過檔案共享來實現多執行緒同時操作同乙個大檔案,以減少檔案讀寫時間,提公升效率。
2、檔案共享的3種實現方式
(1)、檔案共享的核心就是怎麼弄出來多個檔案描述符指向同乙個檔案。
(2)、常見的有三種檔案共享的情況:
第一種就是同乙個程序中多次使用open開啟同乙個檔案,多次使用open時的返回值不一樣;(分別讀/寫)
第二種就是在不同程序中分別使用open開啟同乙個檔案(這時候因為兩個fd在不同的程序中,所以兩個fd的數字可以相同也可以不同);(分別讀/寫)
第三種情況就是linux系統提供了dup和dup2兩個api來讓程序複製檔案描述符。(接續讀/寫)
3、再**件描述符
(1)、檔案描述符的本質就是乙個數字,這個數字本質上是程序表中檔案描述符表的乙個表項,程序通過檔案描述符作為index去索引查表得到檔案表指標,再間接訪問得到這個檔案對應的檔案表。
(2)、檔案描述符這個數字是open系統呼叫內部由作業系統自動分配的,作業系統分配這個fd時,也不是隨意分配,也是遵照一定的規律的,我們現在就要研究這個規律。
(3)、作業系統規定,fd從0開始依次增加。fd也有最大限制的,在linux的早期版本中(0.11)fd最大是20,所以當時乙個程序最多允許開啟20個檔案。linux中檔案描述符表是個陣列(不是鍊錶),所以這個檔案描述符表其實就是乙個陣列,fd是index,檔案表指標是value。
(4)、當我們去open時,核心會從檔案描述符表中挑選乙個最小的未被使用的數字給我們返回。也就是說如果之前fd已經佔滿了0-9,那麼下次我們open得到的一定是10。(但是如果上乙個fd得到的是9,下乙個不一定是10,這是因為可能前邊乙個更小的fd已經被close釋放掉了)。
(5)、fd中0、1、2已經預設被系統占用了,因此使用者程序得到的最小的fd就是3了。
(6)、linux核心占用了0、1、2這三個fd是有用的,當我們執行乙個程式得到乙個程序時,內部就預設開啟了這三個檔案,這三個檔案對應的fd就是0、1、2。這三個檔案分別叫stdin、stdout、stderr。也就是標準輸入、標準輸出、標準錯誤。
(7)、標準輸入一般對應的是鍵盤(可以理解為:0這個fd對應的是鍵盤的裝置檔案)
標準輸出一般是lcd顯示器(可以理解為:1對應lcd的裝置檔案)
(8)、printf函式其實就是預設輸出到標準輸出stdout上了。stdio中還有乙個函式叫fprintf,這個函式就可以指定輸出到哪乙個檔案描述符中。
linux 實現共享檔案共享
linux和winxp資訊共享 samba伺服器的安裝和配置 步驟 1 查詢是否安裝了samba服務 rpm q samba rpm qa grep samba service smb start 2 安裝samba a 掛載映象 mount t iso9660 iso mymedia o loop...
實現Linux共享Window檔案
緣由 我有兩個機器,乙個linux和乙個windows。有乙個專案在windows下出現環境編譯出錯,然後我在linux下可以正常編譯,但是這個專案要在windows下測試。想一想,有沒有一種辦法,在linux下編譯修改的,然後在windows上面跑?然後我想到的是,共享目錄。在網上看了一下,很多都...
linux與windows檔案共享的實現
通過samba伺服器可以實現windows檔案複製到linux中 1 安裝samba伺服器 mount dev cdrom mnt 命令掛載linux光碟到 mnt目錄 rpm ivh samba 3.5.10 125.el6.i686.rpm 安裝該伺服器 2 新增samba使用者 useradd...