如何在c++中返回文件名

  • 本文关键字:返回 文件名 c++ c++
  • 更新时间 :
  • 英文 :


我有问题

如何使用获取程序中"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建议的那样。

通常情况下,您不能。重定向"匿名化"文件名。命令行解释器(但可以是任何类型的环境(通常打开文件并将打开的文件描述符"传输"给命令进程。因此,该过程只知道描述符,而不知道它是如何获得的。

根据托管操作系统的不同,可以检索文件名,但不能保证。例如,在Unixes或衍生物上,您可以通过调用描述符0上的fstat来检索它,并在文件系统中搜索(inode,idev(,但即使在这种情况下,文件名也可能在此期间消失!在支持/proc的Unix上有一些技巧,但文件名可能会再次消失!在Unixes上,重定向可能不是来自文件(请参阅shell的"here-document"操作符(。更常见的是来自匿名管道的输入。因此,如果使用了重定向,检索"原始"文件本质上要么是不可能的,要么是非常困难的(如果可能的话(。

最新更新