유닉스 소켓 공부하다가 의문이 생김.


<arpa/inet.h> 헤더 보면 inet_ntoa()라고 네트워크 바이트 (struct in_addr)를


argument로 받아서 IP 주소로 바꿔서 string으로 리턴하는 함수가 있거든.


예) 127.0.0.1


char buf[] = "127.0.0.1";


이런 식임.


내가 궁금해한 게 char 포인터를 리턴하는데 왜 free를 안 하냐는 거지.


그래서 소스코드 봤는데 이런 식으로 되어있었음.


static __thread char buffer[18]; char * inet_ntoa (struct in_addr in) { unsigned char *bytes = (unsigned char *) &in; __snprintf (buffer, sizeof (buffer), "%d.%d.%d.%d", bytes[0], bytes[1], bytes[2], bytes[3]); return buffer; }


궁금해서 내가 따로 두 개의 다른 파일을 만들어서 한 파일이


다른 파일에서 리턴된 static 변수를 쓸 수 있는지 실험해봤거든.


이런 식으로,


// foo.c #include "foo.h" static char buf[256]; char *create_buf(void) { return buf; }


그리고 이 함수를 다른 파일에서 불러서 써봤는데 되러라.


// main.c #include "foo.h" #include <stdio.h> int main(void) { char *buf = create_buf(); fgets(buf, 256, stdin); printf("%s", buf); }


그래서 내가 추측한 게


static이 file scope이라 직접적으로 변수를 접근할 순 없지만 internal linkage라 같은 translation unit 에서는 쓸 수 있다


라고 생각하는데, 맞음?