输入重定向文件名c ++

时间:2017-03-18 05:32:45

标签: c++ cin getline io-redirection

我的程序有几个参数,输入文件被重定向。我正在解析参数(使用argc和argv)和文件(使用cin)。但是,我无法显示重定向文件的名称。例如,参数是 -

./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);
}

我想阅读这个名字,这是gcc.100k.trace。我怎么做? 附: - 我试过解析参数,但我找不到它!

编辑: address_arr 是int的向量。 pipeline_parameters 是一个长度为5的int数组,用于存储参数。 R F 是存储参数的全局变量。

1 个答案:

答案 0 :(得分:0)

您当然无法使用argcargv来执行此操作。如果有任何希望,可能是致电getppid()获取您的shell的PID,然后阅读/proc/PPID/fdproc/PPID/fdinfo并查看哪些文件在那里打开。

这将是一个非常讨厌的黑客,并且在生产应用程序中没有位置。可能没有足够的理由说明为什么你需要这样做,并且没有其他程序可以做到这一点。