In C how do I print filename of file that is redirected as input in shell

后端 未结 9 1690
情深已故
情深已故 2020-12-10 17:35
$cc a.c
$./a.out < inpfilename

I want to print inpfilename on stdout. How do I do that ? Thanks for the help in advance...

相关标签:
9条回答
  • 2020-12-10 18:26

    You can't get the filename exactly as input; the shell will handle all that redirection stuff without telling you.

    In the case of a direct < file redirection, you can retrieve a filepath associated with stdin by using fstat to get an inode number for it then walking the file hierarchy similarly to find / -inum to get a path that matches it. (There might be more than one such filepath due to links.)

    But you shouldn't ever need to do this. As others have said, if you need to know filenames you should be taking filenames as arguments.

    0 讨论(0)
  • 2020-12-10 18:27

    Why do you want to do this? All your program a.out is passed from the shell, is an open file descriptor, stdin.

    The user might as well do this:

    cat inpfilename | ./a.out
    

    and now you have absolutely no filename to use (except /dev/stdin).

    If a.out needs to work with filenames, why not take the file as a command-line argument?

    0 讨论(0)
  • 2020-12-10 18:32

    In fact, it is possible to get filename from procfs, since /proc/*/fd contains symlink to opened files:

    char filename[bufsize];
    int sz = readlink("/proc/self/fd/0", filename, bufsize-1);
    filename[sz] = 0;
    puts(filename);
    
    0 讨论(0)
提交回复
热议问题