Überprüfen Sie this answer, um den Dateideskriptor zu erhalten, und this answer, um den Dateinamen aus dem Dateideskriptor abzurufen. Sollte unter Linux OK sein (nicht sicher über andere Betriebssysteme).
Hier ist eine schnelle Arbeitsbeispiel (getestet unter 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;
}
Ausgang:
fp -> fno -> filename: 0x80010294 -> 3 -> /tmp/test.txt
Ich glaube, das ist nicht möglich. Sie sollten den Dateinamen getrennt verfolgen. –
Nicht möglich. Wie auch immer [dieses überprüfen] (http://stackoverflow.com/questions/9937645/obtain-filename-from-file-pointer-in-c) – tuxuday
Welches Betriebssystem? – hmjd