在C中如何打印在shell中重定向为输入的文件的文件名

Nul*_*oet 6 c shell printf command-line io-redirection

$cc a.c
$./a.out < inpfilename
Run Code Online (Sandbox Code Playgroud)

我想在stdout上打印inpfilename.我怎么做 ?我在这里先向您的帮助表示感谢...

bob*_*nce 10

您无法完全按输入获取文件名; shell会在不告诉你的情况下处理所有重定向的东西.

在直接< file重定向的情况下,您可以通过使用fstat获取它的inode编号来检索与stdin关联的文件find / -inum路径,然后类似地遍历文件层次结构以获得与其匹配的路径.(由于链接,可能会有多个这样的文件路径.)

但你不应该这样做.正如其他人所说,如果你需要知道文件名,你应该把文件名作为参数.

  • "检索文件路径"操作可能会非常昂贵 - 如果你有大量的NFS挂载文件系统需要扫描,那就更是如此.此外,如所示,它可能不会给你答案; 例如,管道连接在文件系统中根本没有名称. (3认同)