C 从 FILE* 打印文件路径

标签 c linux file printf fopen

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

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

最佳答案

你不能。不仅仅是标准 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);

}

关于C 从 FILE* 打印文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58081928/

相关文章:

c - 链表还是顺序内存?

c++ - 有符号整数类型的大小是否可以不同于 C/C++ 中对应的无符号整数类型的大小?

java.lang.NullPointerException : While displaying all my user files

c - 在 C 中使用 randomize() 而不使用 time.h

c - 如何仅从 C 中的 scanf 复制前 n 个字符

linux - 用另一个文件中的值替换文件中的字符串

linux - 在 Linux 上安装 postgres

c++ - 为大型本地数据处理扩展堆栈大小是个好主意吗?

java - 如何从 java 中的 web 服务获取属性文件的上下文路径?

c++ - 在 C++ 中创建一个文件,就像按右键->新建->新建文本文档一样