2013-10-18 49 views
1

在LINUX中如何實現stdin,stderr,stdout?在linux中如何實現stdin,stdout,stderr?

當然,他們沒有物理文件。它們必須是由操作系統在每個進程的RAM中進行的某種臨時存儲安排。

被附接到每一個單獨過程中的這些陣列的數據結構?

+0

[stdin,stdout和stderr的困惑?](http://stackoverflow.com/questions/3385201/confused-about-stdin-stdout-and-stderr) – 2013-10-18 14:40:41

+1

我已閱讀該帖子。它沒有提到任何地方如果stdin,stdout,stderr是數組數據結構或不..我不會對它們感到困惑。我只想知道它們是如何實現的。 – KawaiKx

回答

5

標準輸入,標準錯誤,和stdout文件描述符(或他們周圍FILE*包裝,如果你指的是C STDIO對象承載這些名字)。文件描述符是索引內核中每進程數據結構的數字。該數據結構記錄哪個I/O通道進程已打開,I/O通道是我的文件,設備,套接字或管道的專用術語。

按照慣例,在表中的第一條目具有索引0,被稱爲標準輸入,1是標準輸出和2是標準錯誤通道。這只是Unix程序中的一個慣例;就內核而言,這些數字沒有特別之處。

每個I/O系統調用(read,write等)都需要一個文件描述符來指示該呼叫應在哪個頻道上運行。

+0

I/O通道是如何實現的? – KawaiKx

+0

@Saurabh:以各種方式組成非常大量的內核源代碼。閱讀它們以找出或者拿起一本書,例如* UNIX操作系統*(Bach)的設計或* 4.3BSD UNIX操作系統的設計和實現*(McKusick等人)。這些描述了Unix如何在內部工作,而Linux非常類似。 –

相關問題