假设我在Linux/bash中得到了如下内容:
./my_program <input_file.in
在我的代码中有一种方法可以检查我的输入文件的名称吗?
像这样的?
if (strcmp(in,"desired_input_file_name.in")) {
printf("success!!"\n);
}
没有便携的简单方式。 通过<
进行管道传输会将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);
}
(为简洁起见,省略错误检查)