我有问题
如何在程序中使用代码获取“input.txt”文件的名称?
./a.out < input.txt
文件名不在主函数参数中。
a.out
,这是在类Unix操作系统下进行的。假设它是Linux,在进程运行时,会在/proc/self/fd/0
下创建指向输入文件(在您的情况下为input.txt)的符号链接。您可以使用readlink
获取其内容。char LinkTarget[200];
readlink("/proc/self/fd/0", LinkTarget, sizeof LinkTarget);
如果您需要文件的名称而不仅仅是内容,那么最好让您的程序通过命令行参数(内部使用argv
)接受文件名,就像Eddymage所建议的那样。
fstat
并在文件系统中搜索(inode,idev)来检索它,但即使在这种情况下,文件名也可能已经消失!在Unix上有一些技巧支持/proc
,但同样可能会出现文件名消失的情况!在Unix上,重定向可能不来自文件(请参见shell的“here document”运算符)。更常见的是从匿名管道输入。因此,如果使用了重定向,则要检索“原始”文件要么天性不可能,要么非常困难(如果可能)。
echo "There may not even be a file to get the name of" | ./aout
- Eljay