2017-03-18 68 views
0

我有幾個參數給我的程序和輸入文件被重定向。我解析參數(使用argc和argv)和文件(使用cin)。但是,我無法顯示重定向文件的名稱。例如,論據是 -輸入重定向文件名C++

./procsim -r 2 -f 4 -j 3 -k 2 -l 1 < gcc.100k.trace 

和我的代碼來解析參數是 -

for (int i = 1; i < argc; ++i) 
    { 
    if (argv[i][0] == '-') 
     { 
     if (!strcmp(argv[i], "-r")) 
     { 
      if (i < argc - 1) 
      { 
       pipeline_parameters[count++] = atoi(argv[i+1]); 
       R = atoi(argv[i+1]); 
       i = i+1; 
      } 
     } 

     else if (!strcmp(argv[i], "-f")) 
     { 
      if (i < argc - 1) 
      { 
       pipeline_parameters[count++] = atoi(argv[i+1]); 
       F = atoi(argv[i+1]); 
       i = i+1; 
      } 
     } 

,並解析文件,我將CIN -

string line; 

while (getline(cin, line)) 
{ 
address_arr.push_back(line); 
} 

我想閱讀fie的名字,這裏是gcc.100k.trace。我怎麼做? P.S. - 我試過解析參數,但我無法找到它!

編輯: address_arr是int的向量。 pipeline_parameters是一個長度爲5的int數組,用於存儲參數。 R and F是存儲參數的全局變量。

+0

歡迎來到計算器!請嘗試創建一個[Minimal,Complete和Verifiable示例](https://stackoverflow.com/help/mcve),因爲示例中缺少信息,例如什麼是pipeline_parameters或address_arr? – nikaza

+2

我不認爲你可以檢索其內容被重定向到'stdin'的文件的名稱。看看[這個答案到另一個SO帖子](http://stackoverflow.com/a/42382373/434551)。它可能會導致你找到你的問題的答案。 –

回答

0

你當然不能使用argcargv。如果有任何希望,可以致電getppid()獲取您的shell的PID,然後閱讀/proc/PPID/fdproc/PPID/fdinfo並查看哪些文件在那裏打開。

這將是一個巨大的討厭的黑客攻擊,並且在生產應用程序中沒有地位。可能沒有足夠的理由說明爲什麼你需要這樣做,並且沒有其他的程序在野外。

+0

感謝John Zwinck! – adarsh94