2011-03-21 482 views
1

如何從我的C++代碼中的shell重定向獲取文件名?即./MyProgram < myfile,我希望將myfile作爲文件名及其內容逐行顯示。如何處理Unix管道

**編輯:我設法從文件中獲得輸入。謝謝您的幫助。但是,在循環遍歷文件內容之後,我想保留用戶輸入的cin。就像這樣:

while (true) 
{ 
    if (cin.eof() == false) 
    { 
     getline(cin, line); 
     cout << line; 
    }else{ 
     cin >> choice; 
    } 
} 
+0

如果標準輸入從文件重定向,也沒有更多的投入到閱讀後你的標準輸入得到EOF;這就是EOF的含義。如果你想從終端讀取,那麼你可能不想支持I/O重定向。 – 2011-03-21 04:01:20

+0

另外,您的問題基本上與管道無關 - 請妥善修改。 – 2011-03-21 04:03:01

+0

你真的應該恢復你的編輯,澄清一個問題是好的,改變一個完全不同的問題是不好的。我想問你的新問題作爲一個單獨的問題,但它已經被回答了很多次。使用'while(cin.getline(line))'。 – 2011-03-21 05:00:11

回答

8

你不能(至少不能移動)。該信息未提供給該程序。相反,您可以從標準輸入中讀取myfile(在您的示例中)的數據。例如,你可以使用C++的getlinecin作爲第一個參數。

+0

的副本但我必須從文件中讀取以上命令的輸入,而不是通過鍵入手動輸入。有沒有辦法獲得整條線? – Amumu 2011-03-21 02:58:36

+0

您可以通過讀取標準輸入來從'myfile'獲取數據。這是重定向操作符的要點。它讓程序讀取用戶輸入的方式與讀取重定向文件的方式相同。 – 2011-03-21 03:11:13

+0

好吧,我做到了。但是,我想在用cin讀取文件後保持用戶輸入,並且它不起作用。它始終保持循環。我會修改我的第一篇文章。 – Amumu 2011-03-21 03:47:48

2

根據shell,您可能已經繼承了一個描述符來表示實際的文件或管道。如果它是一個實際的管道(即fifo),名稱並不意味着太多。但是你可以在linux上獲得這個名字(在Windows上,但是聽起來你並不感興趣)。

Getting Filename from file descriptor in C