2017-03-18 70 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