fopen64() 사용시..

zZze의 이미지

리눅스에서.. 점 큰 화일을 사용할려구 점 뒤적거려 보니까..
fopen64()라는 넘이 있네요.. 사용해 보니 잘 되긴 하는데..
컴파일 해 보니 warning이 뜹니다..

Quote:

warning: implicit declaration of function `fopen64'

이렇게요.. :cry:

그냥 stdio.h 만 include 해 주면 되는게 아닌가요??
stdio.h에는...

Quote:

#ifdef __USE_LARGEFILE64
extern FILE *fopen64 (__const char *__restrict __filename,
__const char *__restrict __modes) __THROW;
extern FILE *freopen64 (__const char *__restrict __filename,
__const char *__restrict __modes,
FILE *__restrict __stream) __THROW;
#endif

이렇게 정의되여 있는데..
그럼 #define __USE_LARGEFILE64를 소스 앞에 추가해야 하는건지..
머 그래두 여전히 warning는 나오구.. :oops:

얼케하면 깨끗하게 컴파일 할 수 있을까요..?? :wink:

withlhw의 이미지

제가 사용하는 wowlinux 7.0에서는 아래와 같이 컴파일 하니깐

warning message가 없더군여..

참고로 (FILE *)로 casting을 해주지 않으니깐 warning message가

발생이 되던데.. 고참 이상하군여. fopen64()의 return type이 FILE*

아닌가여? ^^;

FILE *fp = (FILE *) fopen64(path, mode);

이렇게 한번해보세여.. 그럼...

ssoo76의 이미지

컴파일시 -D__USE_LARGEFILE64 옵션을 넣어주면 될듯합니다.

소스상에서 하려면 #include <stdio.h>를 선언하기 이전에

#define __USE_LARGEFILE64 를 하면 되구요....

제가 테스트를 해보지 않아서 정확하지는 않네요....

세상은 하나..........

kslee80의 이미지

대부분의 표준 헤더 파일에 보면은
/usr/include/features.h 를 인클루드 하는것을 볼수 있으며,
이 파일에서 __USE_* 같은 매크로들을 디파인 합니다.
물론, features.h 초반부에 모든 __USE_* 들을 언디파인 하므로,
__USE_* 를 디파인 하고나서 해당 헤더파일을 인클루드하는것은
의미가 없습니다.

그럼 어떤것을 디파인해야 하는가...;;;
/usr/include/features.h 맨 처음부분에 보면은 설명이 있습니다.

__STRICT_ANSI__ ISO Standard C.
_ISOC99_SOURCE Extensions to ISO C89 from ISO C99.
_POSIX_SOURCE IEEE Std 1003.1.
_POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
if >=199309L, add IEEE Std 1003.1b-1993;
if >=199506L, add IEEE Std 1003.1c-1995
_XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if
Single Unix conformance is wanted, to 600 for the
upcoming sixth revision.
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
_LARGEFILE_SOURCE Some more functions for correct standard I/O.
_LARGEFILE64_SOURCE Additional functionality from LFS for large files.
_FILE_OFFSET_BITS=N Select default filesystem interface.
_BSD_SOURCE ISO C, POSIX, and 4.3BSD things.
_SVID_SOURCE ISO C, POSIX, and SVID things.
_GNU_SOURCE All of the above, plus GNU extensions.
_REENTRANT Select additionally reentrant object.
_THREAD_SAFE Same as _REENTRANT, often used by other systems.

그러므로.;; (결론 내는데 정말 오래 걸렸군요 -_-;;)
컴파일 시에 -D_LARGEFILE64_SOURCE 옵션을 붙이거나,
모든 헤더 인클루드 하기 전에
#define _LARGEFILE64_SOURCE
를 하면 됩니다.

저같은 경우에는 길게 쓰기 귀찮아서 -_-;;
-D_GNU_SOURCE 하는 경우가 많습니다 ^^;

zZze의 이미지

헐.. 그렇쿤요.. /usr/include/features.h를 읽어 보지 못했네요..
이눔의 게으름이란.. :oops:

참고로.. (FILE *) 캐스팅은 제 경우처럼 헤더를 제대로 인클루드 못했기 때문인것 같네요.. -Wall 옵션을 주셔서 컴파일 해 보시면 저랑 같은 warning을 보실겁니다.. -_-+

답변 감사 드립니다.. :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.