fopen 함수로 으로 파일위치를 넣고 FILE포인터를 얻고 open함수로 파일 디스크립터를 얻는 걸로 알고 있습니다.
이 FILE포인터 또는 디스크립터로 읽은 파일명을 알아 낼수 있는 방법이 있나요 혹시?
fopen은 표준 라이브러리 함수고 open은 POSIX표준 함수죠. 따라서 일반적인 방법은 없고, 해당 플랫폼에서 fopen구현을 살펴 보시면 도움이 되긴 합니다. fopen내부에 open으로 디스크립터를 얻고 FILE구조체 내부에 두는게 일반적인 구현 방법중 하나입니다.
http://stackoverflow.com/questions/1658476/c-fopen-vs-open 참고하셔요.
세벌 https://sebuls.blogspot.kr/
꼼수 ..
$ cat a.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <libgen.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(void) { int fd; FILE *fp; char pbuf[BUFSIZ], rbuf[BUFSIZ]; fd = open("a.txt", O_CREAT|O_RDWR, 0600); if (fd == -1) return EXIT_FAILURE; snprintf(pbuf, sizeof(pbuf), "/proc/%d/fd/%d", getpid(), fd); readlink(pbuf, rbuf, sizeof(rbuf)); printf("open: %s (%s)\n", rbuf, basename(rbuf)); close(fd); fp = fopen("b.txt", "w"); if (fp == NULL) return EXIT_FAILURE; snprintf(pbuf, sizeof(pbuf), "/proc/%d/fd/%d", getpid(), fileno(fp)); readlink(pbuf, rbuf, sizeof(rbuf)); printf("fopen: %s (%s)\n", rbuf, basename(rbuf)); fclose(fp); return EXIT_SUCCESS; } $ gcc -g -W -Wall a.c $ ./a.out open: /home/ymir/prog/a.txt (a.txt) fopen: /home/ymir/prog/b.txt (b.txt)
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
이런방법이!
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
fopen은 표준 라이브러리 함수고 open은
fopen은 표준 라이브러리 함수고 open은 POSIX표준 함수죠. 따라서 일반적인 방법은 없고, 해당 플랫폼에서 fopen구현을 살펴 보시면 도움이 되긴 합니다. fopen내부에 open으로 디스크립터를 얻고 FILE구조체 내부에 두는게 일반적인 구현 방법중 하나입니다.
http://stackoverflow.com/ques
http://stackoverflow.com/questions/1658476/c-fopen-vs-open 참고하셔요.
세벌 https://sebuls.blogspot.kr/
음 ..
꼼수 ..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
감사합니다.
이런방법이!
댓글 달기