c - C 从 FILE* 打印文件路径
问题描述
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);
}
推荐阅读
- docker - 如果我可以将 docker 文件与源代码一起共享,我是否需要共享 docker 映像?
- sql - 对分组内的行进行排名(2 列)
- powerbi - DAX:映射项目如果同时出现在 2 个日期
- javascript - 从 Erddap 到 Leaflet Velocity map 的数据
- java - 有没有办法明确禁用 PDFBox 文本注释的圆角边框?
- python - Pandas 中产品的连续日期
- c# - 在调试模式 VSCode 中找不到本地程序集
- hyperledger-fabric - 无法从 fabric-samples 在 Fabric 上部署示例链代码
- python - 按JSON中的值对python中的JSON文件进行排序
- next.js - Nextjs 10.0 构建没有样式