檔案流與檔案描述符的區別
a)任何程序在執行時都預設開啟3
個流物件,(
stdin, stdout, stderr
)它們都有對應的檔案描述符,其檔案描述符分別為0,
1,2,以後開啟的檔案描述符的值一般都選用未使用的最小值
b)linux為管理每個每個程序開啟的檔案,在程序的私有結構體
struct task_struct
(即程序
pcb,由核心提供)中,對任何程序來說,都將為這個結構體專門分配管理開啟檔案資訊的表項,用以指示當前程序開啟的檔案結構體,通俗點解釋就是每乙個程序都在核心的
struct task_struct
結構體中有乙個資訊表項,然後這個表項指向這個程序所開啟的檔案列表,然後檔案列表中的檔案描述符指向具體開啟的檔案結構資訊
c)檔案描述符與檔案流的轉換操作
linux為使用者層提供了函式
fileno( )
以從檔案流中讀取其檔案描述符
extern int fileno( file *__stream)
函式fdopen( )
將實現某個流與乙個檔案描述符的連線
extern file *fdopen ( int __fd, __const char *__modes),這裡需要使用
fprintf( )
來操作流物件。
有了上述對流,對檔案描述符的較深入的了解,接下來學習posix
標準下的檔案
io管理就會有更多自己的體會。
fopen( ), fread( ), fwrite( ), fclose( ), open( ), read( ), write( ), close( ), creat( ), lseek( )
檔案開啟flags
標識一覽:
o_rdonly
o_wronly
o_rdwr,
o_creat
o_excl若同o_creat
一起使用,如果檔案已經存在報錯
o_noctty 如果開啟終端裝置,不將其作為程序控制終端機
o_trunc 若檔案存在並且可讀可寫,將檔案內容清空
o_nonblock以非阻塞方式開啟,執行後立即返回
o_ndelay 同
o_nonblock
o_sync 同步方式開啟檔案,關閉檔案前,將快取寫入
o_largefile 在
32位系統下支援大於
2g檔案開啟操作
檔案開啟許可權一覽:
s_i(
r/w/x
)(usr/grp/oth
),s_irwxu, s_irwxo, s_irwxg
以上是系統函式許可權設定標識,使用者函式不同,如「r+
」「w+
」等
自己做筆記新增進來。
檔案控制fcntl( )函式,用於修改某個檔案描述符的特殊屬性,複製檔案描述符,獲取檔案描述符,設定檔案描述符,獲取檔案狀態設定檔案狀態
對映檔案到記憶體mmap( )
鎖定/解鎖檔案
函式flock( )
和 函式
fcntl( )
都可以提供對檔案的鎖操作,但是
flock( )
只能鎖定整個檔案,不能鎖定某個區域,而
fcntl( )
可以提供任意位置的內容鎖定。
目錄流的基本操作-----
目錄檔案中儲存的是該目錄下所有的檔案以及子目錄檔案的資訊
a)開啟/
關閉目錄檔案
dir *opendir( const char *dirname)
dir *closedir( const char *dirname) 返回乙個目錄流指標
b)讀/
寫目錄內容
c)定位目錄內容
d)新增和刪除目錄
e)獲取當前工作路徑
7.以上關於檔案的操作只是基本的關於檔案操作內容,還有一塊內容,是關於對普通檔案,連線檔案及目錄檔案屬性的讀取修改等操作,這塊內容大家自己學習,不進行講授。
系統io(檔案io)
檔案描述符 檔案描述符 已開啟檔案的標誌,是非負整形數,當前可以最小作為新檔案的檔案描述符,預設範圍0 1024 可更改 檔案開啟 int open const char pathname,int flags,mode t mode 1.pathname 要開啟檔案的路徑 2.flags 開啟方式 ...
檔案系統操作大綱
檢視當前所有盤的掛載資訊 cat proc mounts badblocks v dev hda1 檢查磁碟hda1上的壞磁塊 fsck dev hda1 修復 檢查hda1磁碟上linux檔案系統的完整性 fsck.ext2 dev hda1 修復 檢查hda1磁碟上ext2檔案系統的完整性 e2...
IO操作 檔案IO
一 系統呼叫 系統呼叫實際上是作業系統 核心 提供的供使用者使用的介面函式。二 標準io函式和檔案io函式的關係 標準io是c庫內定義的函式,是凌駕於系統之上的,適用於任何的作業系統 檔案io是由linux系統提供的,只能在linux系統中使用,而不可以在其它作業系統中使用。標準io函式可以呼叫檔案...