2017-03-18 15 views
0

私のプログラムにはいくつかの引数があり、入力ファイルはリダイレクトされています。私は引数(argcとargvを使って)とファイル(cinを使って)を解析しています。ただし、リダイレクトされたファイルの名前を表示できません。たとえば、引数が入力リダイレクトファイル名C++

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

をare-と引数を解析するために私のコードがある -

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.P. - 私は引数を解析しようとしましたが、私はそれを見つけることができません!

編集: address_arrはintのベクトルです。 pipeline_parametersは、引数を格納するための長さがintの配列です。 Rおよびfは引数も格納するグローバル変数です。

+0

ようこそstackoverflowへようこそ!あなたの例に欠落している情報があるので、[最小、完全、かつ検証可能な例](https://stackoverflow.com/help/mcve)を作成してください。たとえば、pipeline_parametersまたはaddress_arrは何ですか? – nikaza

+2

内容が 'stdin'にリダイレクトされたファイルの名前を取得することはできません。 [別のSOの投稿へのこの回答](http://stackoverflow.com/a/42382373/434551)を見てください。あなたの質問に対する答えを見つけることができます。 –

答えて

0

確かにargcargvを使用して行うことはできません。希望があれば、getppid()に電話してシェルのPIDを取得し、次に/proc/PPID/fdまたはproc/PPID/fdinfoと読み込んでそこに開いているファイルを確認することができます。

これは非常に厄介なハッキングになり、プロダクションアプリケーションには存在しません。おそらくあなたがこれをする必要がある十分な理由はないでしょうし、野生の他のプログラムはそれをしません。

+0

John Zwinckに感謝します! – adarsh94

関連する問題