輸入、輸出是在主存和外部設(shè)備之間復(fù)制數(shù)據(jù)的過(guò)程。
Unix I/O
一個(gè)Linux 文件就是一個(gè)m個(gè)字節(jié)的序列。所有的I/O設(shè)備都被模型化為文件,所有的輸入和輸出都被當(dāng)做對(duì)應(yīng)文件的讀和寫(xiě)來(lái)執(zhí)行。這種將設(shè)備映射為文件的方式,使得Linux內(nèi)核引出一個(gè)簡(jiǎn)單、低級(jí)的應(yīng)用接口,稱為Unix I/O。文件種類:
普通文件,目錄,套接字、命名管道、符號(hào)鏈接、字符和塊設(shè)備。文件共享:
描述符表:每個(gè)進(jìn)程都有一個(gè)描述符表。里面記錄了進(jìn)程打開(kāi)的文件描述符。指向文件表中的一個(gè)表項(xiàng)。
文件表:每個(gè)文件表的表項(xiàng)包括當(dāng)前的文件位置、引用計(jì)數(shù)等,以及指向v-node表中對(duì)應(yīng)表項(xiàng)的指針。
v-node表:所有進(jìn)程共享,包括stat結(jié)構(gòu)中的大多數(shù)信息,即文件的元數(shù)據(jù),如st_mode和st_size成員。I/O重定向
int dup2(int oldfd, int newfd);
表示復(fù)制描述符表項(xiàng)oldfd到新描述符表項(xiàng)newfd,覆蓋描述符表項(xiàng)newfd以前的內(nèi)容。如果newfd已經(jīng)打開(kāi)了,則dup2會(huì)在復(fù)制oldfd之前關(guān)閉newfd。
即原本newfd指向A,則復(fù)制之后newfd也指向oldfd所指向的文件表項(xiàng)。所以之后對(duì)newfd的IO都重定向到了oldfd。