我的程序有几个参数,输入文件被重定向。我正在解析参数(使用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 是存储参数的全局变量。
答案 0 :(得分:0)
您当然无法使用argc
和argv
来执行此操作。如果有任何希望,可能是致电getppid()
获取您的shell的PID,然后阅读/proc/PPID/fd
或proc/PPID/fdinfo
并查看哪些文件在那里打开。
这将是一个非常讨厌的黑客,并且在生产应用程序中没有位置。可能没有足够的理由说明为什么你需要这样做,并且没有其他程序可以做到这一点。