2011-03-21 67 views
0

C++ cin是一個文件描述符,可以使用dup()重複嗎?我想複製標準輸入,以便使用一個用於文件流的shell使用重定向,一個用於在從文件獲取所有輸入後進行常規輸入。在C++中複製std :: cin

回答

3

的std :: CIN是input stream。這是一個C++概念,可以使用(部分)文件句柄實現場景下的可能。但是,您只能訪問流對象及其成員。

+0

謝謝。我會試試看。 – Amumu 2011-03-21 17:27:58

3

std::cin綁定到標準輸入文件描述符,在POSIX世界它被定義爲STDIN_FILENO其值通常爲0 std::cin僅僅是一個特殊std::istream從該描述符讀取。你可以使用dup複製它 - 沒問題,你根本沒有必要使用std::cin

+0

那麼,我可以重新分配cin後,從我的shell與我的coppied fd輸入?即./MyProgram Amumu 2011-03-21 17:35:27

0

您不需要複製流,只需創建一個fstream並讀取數據需求。

+0

問題是我必須從shell重定向獲取輸入,例如:./MyProgram Amumu 2011-03-21 17:31:09

+0

@Amumu:如果你使用shell重定向,'dup'操作在shell級別透明地發生,你不需要擔心。只要繼續使用'std :: cin'讀取STDIN,並且您的程序不會知道(也不需要知道)它是從文件讀取還是從用戶交互中讀取。 – 2011-03-21 17:37:12

+0

我不知道從shell獲取兩個輸入的方式,可能你只需要將一個文件名作爲cmdline參數傳遞給它? – vissi 2011-03-21 17:38:09