파일 설명자를 얻기 위해 this answer을 확인하고 파일 설명 자로 파일 이름을 가져 오려면 this answer을 확인하십시오. 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;
}
출력 : 루트하고 lsof
명령 만약 내가 검색으로
fp -> fno -> filename: 0x80010294 -> 3 -> /tmp/test.txt
나는 이것이 가능하지 않다고 생각합니다. 파일 이름을 별도로 추적해야합니다. –
불가능합니다. 어쨌든 [이 체크] (http://stackoverflow.com/questions/9937645/obtain-filename-from-file-pointer-in-c) – tuxuday
어떤 운영 체제? – hmjd