POLLRDNORM, OPEN_MAX 매크로 사용시 컴파일문제

chykrkr의 이미지

Unix Network Programming 이란 책에서 예제를 하나 컴파일 하려고 했는데 에러가 나서 말이죠. 고쳐서 돌리긴 했는데, 왜 이런 에러가 나는지 궁금하네요. 생략한 소스는 두개가 같기 때문에 선언부만 올렸습니다. 실제로 선언부에서 생긴 문제더라구요.

원래소스

#include "unp.h"
#include <limits.h>

..... 중략

이걸 컴파일하면 POLLRDNORM, OPEN_MAX 매크로 가 정의 안 되었다고 뜨고 컴파일 에러가 납니다.

제가 고친 소스

#include <linux/limits.h>
#include "unp.h"
#define __USE_XOPEN
#include <bits/poll.h>
..... 중략

요렇게 하면 되긴 되던데 몇가지 의문점이 있네요.
밑에거는 실행용 소스인데요

#include <stdio.h>
#include <poll.h>

int main(int argc,char**argv)
{
int j=POLLRDNORM;
int k=POLLIN;
printf("%ld",j);
}

이걸

gcc -D_XOPEN_SOURCE 파일 이런 식으로 _XOPEN_SOURCE 매크로를 선언해서 사용해야 컴파일이 되던데요. 제가 고친 소스에서 그렇게 하면 unp.h 파일에서 u_char *inet_srcrt_init(void); 이 부분에서 컴파일 오류가 나서

#define __USE_XOPEN
#include <bits/poll.h>

요부분을 추가 했거든요. POLLRDNORM이 bits/poll.h 에서 선언되어 있고 __USE_XOPEN 이 정의되어 있어야 쓸수 있더군요. 원래는 unp.h헤더에 <poll.h> 인클루드 되어 있는데. __USE_XOPEN 이 정의가 안되어 있어서 <bits/poll.h> 에서 POLLRDNORM이 선언이 안되더 군요. __USE_XOPEN 컴파일 할때 _XOPEN_SOURCE 매크로를 정의 해서 사용하면 되지만 unp.h헤더 에서 컴파일 오류가 나서 꽁수를 쓴겁니다.

1.우선은 _XOPEN_SOURCE 매크로가 뭔지 궁금하고요

2.두번째는 OPEN_MAX 매크로 인데 이게 /usr/include/bits/local_lim.h 에서 언디파인 되더라구요 아마 이것도 unp.h헤더에 포함되어 있는것 같구요. 그래서 #include <linux/limits.h> 를 맨 윗줄에 넣었습니다. 요게 먼저 인클루드 되어 있으면 언디파인을 안하는것 같습니다.

글솜씨가 없어서 내용만 길어지고 요지도 말하지 못한것 같습니다.
1._XOPEN_SOURCE 매크로가 어떤 용도의 매크로 인지 2./usr/include/bits/local_lim.h 에서 OPEN_MAX 를 언디파인 하는 이유
이 두가지가 궁금하군요

참고로 위의 소스는 Unix networking programming volume 1 (W. Stevens) 에서 6.11 장 Figure 6.25 부분의 예제입니다. 이 책 많이 보시는 것 같더라구요. 그래서 저두 하나 샀는데 혹시 이책 보시다가 저랑 비슷한 에러 나오시는 분은 좀 가르쳐 주세요. 리눅스는 레드헷 9 를 쓰고 있습니다.

chykrkr의 이미지

소스 필요하시면 말씀해주세요 이책에서 자체 제작한 헤더랑, 라이브러리를 쓰기 때문에 컴파일 하실려면 이것이 있어야 될겁니다. 그리고 제가 받은 라이브러리에서도 Figure 6.25 부분은 없기 때문에 이것도 따로 있어야 됩니다. 혹, 필요하시면 제가 올려드릴께요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.