Unix I/O
所有的I/O設(shè)備都被模型化為文件,因此所有的輸入和輸出操作都被當(dāng)做對相應(yīng)文件的讀和寫來執(zhí)行,這種方式稱為Unix I/O,其使得所有的輸入和輸出都能以一種統(tǒng)一且一致的方式來進(jìn)行
文件
包含:
-
普通文件:又分為
文本文件和二進(jìn)制文件 -
目錄:包含一組
鏈接的文件,其中每一個(gè)鏈接都將一個(gè)文件名映射到一個(gè)文件,這個(gè)文件還有可能是一個(gè)目錄 - 套接字:用來與另一個(gè)進(jìn)程進(jìn)行跨網(wǎng)絡(luò)通信的文件
打開文件
通過open函數(shù)來打開一個(gè)已存在的文件或創(chuàng)建一個(gè)新的文件,包含以下幾種方式:
- O_RDONLY:只讀
- O_WRONLY:只寫
- O_RDWR:可讀可寫
- O_CREAT:如果文件不存在,就創(chuàng)建它的一個(gè)截?cái)辔募?/li>
- O_TRUNC:如果文件存在,就截?cái)嗨?/li>
- O_APPEND:在每次寫操作前,設(shè)置文件的位置到文件的結(jié)尾
通過close函數(shù)關(guān)閉一個(gè)打開的文件
讀寫文件
通過read函數(shù)從描述符為fd的當(dāng)前文件位置復(fù)制最多n個(gè)字節(jié)到內(nèi)存位置buf,返回-1表示一個(gè)錯(cuò)誤,而返回0表示EOF,否則返回值表示的是實(shí)際傳送的字節(jié)數(shù)量
通過write函數(shù)從內(nèi)存位置buf復(fù)制最多n個(gè)字符到描述符為fd的當(dāng)前文件位置
共享文件
Linux內(nèi)核用三個(gè)相關(guān)的數(shù)據(jù)結(jié)構(gòu)來表示打開的文件:
- 描述符表:每個(gè)進(jìn)程都有它獨(dú)立的描述符表,它的表項(xiàng)是由進(jìn)程開發(fā)的文件描述來索引的
- 文件表:打開文件的集合是由一張文件表來表示的,所有的進(jìn)程共享這張表
- v-node表:所有的進(jìn)程都共享這張表,每個(gè)表項(xiàng)包含stat結(jié)構(gòu)中的大部分信息
I/O 重定向
I/O 重定向操作符允許用戶將磁盤文件和標(biāo)準(zhǔn)輸入輸出聯(lián)系起來
在代碼中可以使用dup2函數(shù)來實(shí)現(xiàn)