提问者:小点点

获取通过重定向传入的输入文件的名称?


假设我在Linux/bash中得到了如下内容:

./my_program <input_file.in

在我的代码中有一种方法可以检查我的输入文件的名称吗?

像这样的?

if (strcmp(in,"desired_input_file_name.in")) {
   printf("success!!"\n);
}

共2个答案

匿名用户

没有便携的简单方式。 通过<进行管道传输会将input_file.in的内容重定向到my_program的标准输入。 就像你输入了文件的内容一样。 如果您想知道文件名,那么您需要传递该文件名,例如作为命令行参数:

./my_program input_file.in

匿名用户

有一个不可移植的解决方案。 Linux有proc文件系统,可以用来获取信息。 您可以获取stdin的文件描述符,然后从中获取文件名-使用fileno(3)readlink(3)调用。

#include<stdio.h>
#include<unistd.h>

int main(void)
{
    char buf[512], file[512] = {0};

    snprintf(buf, sizeof buf, "/proc/self/fd/%d", fileno(stdin));
    readlink(buf, file, sizeof file - 1);

    printf("File name: %s\n", file);
}

(为简洁起见,省略错误检查)