아.. 예전에도 똑같이 고생해놓고 까먹고 또 고생하다 결국 포스트해놓는다... ㅠㅠ
#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 |