在给定FILE指针的情况下,如何找到文件名?

nzo*_*xia 16 c file

可能重复:
从C中的文件描述符
获取文件名从C中的文件指针获取文件名

我在这里有一个功能:

handle_file(FILE *file)
{
    if(condition)
    {
        print filename and other msg;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们在这里唯一知道的是指向文件的指针; 是否可以根据指针获取文件名?

bce*_*ary 22

查看此答案以获取文件描述符和此答案以从文件描述符中获取文件名.在Linux上应该没问题(不确定其他操作系统).

这是一个快速工作的例子(在Cygwin/Win7下测试):

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

int main()
{
    int MAXSIZE = 0xFFF;
    char proclnk[0xFFF];
    char filename[0xFFF];
    FILE *fp;
    int fno;
    ssize_t r;

    // test.txt created earlier
    fp = fopen("test.txt", "r");
    if (fp != NULL)
    {
        fno = fileno(fp);
        sprintf(proclnk, "/proc/self/fd/%d", fno);
        r = readlink(proclnk, filename, MAXSIZE);
        if (r < 0)
        {
            printf("failed to readlink\n");
            exit(1);
        }
        filename[r] = '\0';
        printf("fp -> fno -> filename: %p -> %d -> %s\n",
                fp, fno, filename);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

fp -> fno -> filename: 0x80010294 -> 3 -> /tmp/test.txt
Run Code Online (Sandbox Code Playgroud)