2011-03-16 39 views
0

每個進程是否有與其關聯的鍵盤和終端的stdin,stdoutstderr每個進程是否有stdin stdout stderr定義爲鍵盤,終端等?

我有一個小程序。我想將鍵盤輸入替換爲名爲new.txt的文件。我該如何解決它?

FILE *file1 
fopen("new.txt", "r") 
close(0); // close the stdio 
dup2(file1, 0); 

這項工作?現在我的stdio被重定向到FILE

回答

4

不,不是過程。但在給你一個命令行窗口輸入的操作系統上,從該命令行啓動的程序將把stdin連接到鍵盤,stdout和stderr都會到達終端。

如果一個程序開始另一個程序,那麼通常第二個程序的標準流以某種方式連接到第一個程序;例如,第一個程序可能有一個開放的描述符,通過它可以發送文本並假裝它是第二個進程的「鍵盤」。當然,細節因操作系統而異。

1

在回答你的問題:

將這項工作?

dup2()佔2個文件描述符(int S),當你傳遞一個FILE *int。您不能混合文件句柄FILE * s)和文件描述符int s)那樣。

你可以使用的open代替fopen打開你的文件作爲文件描述符,而不是文件句柄,或者你可以使用fileno從文件句柄獲取文件的描述符。或者您可以使用freopenstdin文件句柄重新打開到新文件。

注意,文件描述符(int S)是POSIX操作系統的一部分,只是移植到其他POSIX系統,而文件句柄(FILE * S)是C標準的一部分,是便攜式無處不在。如果使用文件描述符,則必須重寫代碼才能使其在Windows上工作。

相關問題