C print file path from FILE*

前端 未结 3 1731
生来不讨喜
生来不讨喜 2020-12-11 05:44
FILE * fd = fopen (\"/tmp/12345\",\"wb\");

If I have the variable fd , how can I print the file path ? (/tmp/12345) in Linux env.

3条回答
  •  孤城傲影
    2020-12-11 06:07

    You can't. Not with just standard C.

    On Linux you can do:

    #include 
    #include 
    #include 
    #include 
    
    
    int print_filename(FILE *f)
    {
        char buf[PATH_MAX];
        char fnmbuf[sizeof "/prof/self/fd/0123456789"];
        sprintf(fnmbuf,"/proc/self/fd/%d", fileno(f));
        ssize_t nr;
        if(0>(nr=readlink(fnmbuf, buf, sizeof(buf)))) return -1;
        else buf[nr]='\0';
        return puts(buf);
    }
    
    int main(void)
    {
        FILE * f = fopen ("/tmp/12345","wb");
        if (0==f) return EXIT_FAILURE;
        print_filename(f);
    
    }
    

提交回复
热议问题