输入重定向文件名c++
input redirection file name c++
我的程序有几个参数和一个正在重定向的输入文件。我正在解析参数(使用 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。我怎么做?
P.S。 - 我已尝试通过参数进行解析,但找不到它!
编辑:
address_arr 是一个整型向量。 pipeline_parameters是一个长度为5的int数组,用来存放参数。 R 和 F 是存储参数的全局变量还有。
您当然不能使用 argc
和 argv
来做到这一点。如果有任何希望,可能是调用 getppid()
来获取您的 shell 的 PID,然后读取 /proc/PPID/fd
或 proc/PPID/fdinfo
并查看那里打开了哪些文件.
这将是一个巨大的讨厌的 hack,并且在生产应用程序中没有立足之地。您需要这样做的理由可能不够充分,而且目前还没有其他程序这样做。
我的程序有几个参数和一个正在重定向的输入文件。我正在解析参数(使用 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。我怎么做? P.S。 - 我已尝试通过参数进行解析,但找不到它!
编辑: address_arr 是一个整型向量。 pipeline_parameters是一个长度为5的int数组,用来存放参数。 R 和 F 是存储参数的全局变量还有。
您当然不能使用 argc
和 argv
来做到这一点。如果有任何希望,可能是调用 getppid()
来获取您的 shell 的 PID,然后读取 /proc/PPID/fd
或 proc/PPID/fdinfo
并查看那里打开了哪些文件.
这将是一个巨大的讨厌的 hack,并且在生产应用程序中没有立足之地。您需要这样做的理由可能不够充分,而且目前还没有其他程序这样做。