아.. 예전에도 똑같이 고생해놓고 까먹고 또 고생하다 결국 포스트해놓는다... ㅠㅠ

     #include <arpa/inet.h> //64bit에서는 다음 헤더파일 사용;;;

     inet_ntoa()

--------------------------------------------------------------------------------

원문주소

http://ryujeen.tistory.com/entry/64-bit-머신에서-inetntoa-함수가-세그먼트-떨어지는-이유는

아 황당하다. 이러한 시츄에이션~
답도 보면 황당하다.~

64 bit 머신에서 unsigned long의 주소값을 스트링으로 찍어주기 위해 inet_ntoa 함수를
사용하곤 한다. 근데 근데... segment fault를 내며 퍽 죽는다. 왜 그럴까 왜 그럴까?
32 bit 머신에서 돌렸을 땐 쌩쌩 잘 돌아간다. 왜 그럴까 ? 왜 그럴까 ?
그러면서 인터넷등 구글을 찾아본다. 64 bit 시스템을 욕하면서...
예를 들면 이런 문제이다.
링크 : http://kldp.org/node/80698
제목 : 64비트에서 inet_ntoa 함수가 동작을 하지 않는것 같습니다.

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
#include <sys/stat.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
        struct in_addr in;
        struct in_addr inp;

        char strBuff[20];

        inet_aton("200.200.200.200", &inp);
        //memcpy(&in, &inp, 8);
        strcpy( strBuff, (char *)inet_ntoa(inp));

        printf("ip : %s\n", strBuff);

        return 0;
}

위코드로 테스트했는데요.. 32bit 머신에서는 잘 됩니다만.. 64bit 머신에서는 segment fault 를 뱃습니다..
아예 지원을 안하는건지 ^^:

그러나... 이건 프로그래머의 실수...
64 비트 머신에서 inet_ntoa 함수를 호출하면 이런 함수를 호출하고 있었다.
$ uname -a (참고로 작업 시스템)
Linux 2.6.9-55.ELsmp #1 SMP Fri Apr 20 16:36:54 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
난 이런 include를 한 적도 없는데 이런 놈을 include 하더라~
tcl-private/unix/tclUnixPort.h
#define inet_ntoa(x)    TclpInetNtoa(x)
시간이 없어서 도대체 어떻게 저 넘을 include 하는 지 따라 갈 순 없었다.

man 페이지를 확인하는 습관을 갖고 include를 확인하자. 능숙하다고 생각할 수록 기본을
잊는거 같다.
NAME
       inet_addr, inet_ntoa - IPv4 address manipulation
 
SYNOPSIS
      #include <arpa/inet.h>
 
       in_addr_t inet_addr(const char *cp);
       char *inet_ntoa(struct in_addr in);

'Programming Language > c언어' 카테고리의 다른 글

C언어 메모리 구조  (0) 2011.03.02
[스크랩] unistd.h execve함수  (0) 2010.11.16
헝가리안 표기법의 장단점  (0) 2010.08.26
[스크랩]c 배열 초기화  (0) 2010.08.26
[스크랩] xor ^  (0) 2010.01.25

+ Recent posts