我有一种情况需要获取文件名,以便调用 readlink() 函数。我所拥有的只是一个整数,它最初通过 open() 命令存储为文件描述符。问题是,我无权访问执行 open() 命令的函数(如果我这样做了,那么我就不会发布这个)。open() 的返回值存储在我可以访问的结构中。
char buf[PATH_MAX];
char tempFD[2]; //file descriptor number of the temporary file created
tempFD[0] = fi->fh + '0';
tempFD[1] = '\0';
char parentFD[2]; //file descriptor number of the original file
parentFD[0] = (fi->fh - 1) + '0';
parentFD[1] = '\0';
if (readlink(tempFD, buf, sizeof(buf)) < 0) {
log_msg("\treadlink() error\n");
perror("readlink() error");
} else
log_msg("readlink() returned '%s' for '%s'\n", buf, tempFD);
这是 FUSE 文件系统的一部分。该结构称为fi,文件描述符存储在fh中,其类型为uint64_t。由于该程序的执行方式,我知道两个链接文件的文件描述符编号始终相隔 1。至少这是我的工作假设,我试图用这段代码来验证。
这可以编译,但是当我运行它时,我的日志文件每次都显示读取链接错误。我的文件描述符中存储了正确的整数值,但它不起作用。
有谁知道我如何从这些整数值中获取文件名?谢谢!