fopen64와 -D_GNU_SOURCE와의 관계
글쓴이: alfalf / 작성시간: 월, 2003/05/26 - 6:44오후
8GB 정도의 크기를 가지는 파일을 핸들 할일이 있어 fopen64를 사용했는데 그냥 컴파일 했더니 아래와 같은 경고 메세지가 떠서
warning: implicit declaration of function `fopen64' warning: assignment makes pointer from integer without a cast
gcc 컴파일시 -D_GNU_SOURCE 옵션을 주었더니 경고없이 컴파일이 잘 되네요.
물론 fopen 함수에 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 옵션으로 컴파일 해도 잘 되기는 하지만 아래와 같은 의문이 생기네요.
궁금한것은 fopen64와 GNU와 어떤 관계인가 하는 겁니다. fopen64가 glibc에서만 지원되는 함수인가요? 그리고 다른 시스템에서는 대형 파일을 다룰때 fopen만으로 가능한건가요?
그럼. 부탁드리겠습니다.
Forums:
Fopen64와 GNU와는 아무 상관 없습니다.단지 2G 넘는
Fopen64와 GNU와는 아무 상관 없습니다.
단지 2G 넘는 파일들을 처리하기 위해서 필요한대로 만들었을 뿐입니다.
그리고 fopen64는 시스템별로 구현되지 않은 것도 있을 수 있고, 다른 함수로
구현된 것도 있을겁니다.
Written By the Black Knight of Destruction
글쎄요...
#include <stdio.h>
혹은
#include <cstdio>
using namespace std;
윗분 말씀대로 GNU와 상관 없고,
ㅡ_-) 경고 내용으로 봐서는 fopen64를 정의 안 하고
사용했다는 이야기인데... stdio의 함수들은 include 하지 않아도
오류를 발생하지 않더군요.
위의 코드를 그냥 컴파일하면 ㅡ_-); 컴파일 됩니다.
질문에서 나온 경고가 뜨면서요...
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
자세한것은 glibc 소스 최상위 디렉토리의 NOTES 파일을 보시면 아
자세한것은 glibc 소스 최상위 디렉토리의 NOTES 파일을 보시면 아시겠지만,
_LARGEFILE_SOURCE, _LARGEFILE64_SOURCE, _FILE_OFFSET_BITS
등은 LFS extension을 위한 것들이며,
_GNU_SOURCE 는 단지 NOTES 파일에 설명되어 있는 많은 매크로들을
다 정의하는 매크로일 뿐입니다. 그렇기에 _GNU_SOURCE 를 정의하더라도
fopen64() 같은 평션을 사용할수 있는 것입니다.
GNU 와 LFS 의 관계라....
큰 관련성이 있다고는 생각되지 않네요.
LFS 지원이 glibc 에 추가되어 있다고 해도, 커널에서 지원해주지 않는다면
사용할수 없습니다.(동작을 제대로 하지 않죠;;)
그렇기에 GNU 단독적인 것이라고는 보기 힘들듯 싶습니다.
PS) glibc 풀소스가 없으시다면 이 링크로 NOTES 파일을 보세요.
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/NOTES?rev=1.5&content-type=text/x-cvsweb-markup&cvsroot=glibc
모든 분들께 감사합니다.
감사합니다.
덕문에 제 의문이 모두 풀렸네요.
맨 마지막분 답글을 보니
앞으로는 보다 정교하게 옵션을 사용해야 겠네요.
그럼. 모두들 행복하시길 빌면서 이만...
댓글 달기