首页 > 解决方案 > C 从 FILE* 打印文件路径

问题描述

FILE * fd = fopen ("/tmp/12345","wb");

如果我有变量fd,如何打印文件路径?(/tmp/12345) 在 Linux 环境中。

标签: clinuxfileprintffopen

解决方案


你不能。不仅仅是标准 C。

在 Linux 上,您可以执行以下操作:

#include <stdio.h>
#include <unistd.h>
#include <limits.h>
#include <stdlib.h>


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);

}

推荐阅读