Tip
윈도우에서 네트워크 프로그램 소스를 컴파일 하던 중 이상한 warning 을 발견하였다. C:Documents and SettingsOwnerMy DocumentsNetworkhelloworld_client_winhelloworld_client_win.c(34) : warning C4761: integral size mismatch in argument; conversion supplied 문제의 소스 부분은 다음이었다. servAddr.sin_port = htons(atoi(argv[2])); 보기에는 문제가 없는 부분이다. 정상작동하는 소스였다.(..리눅스에서 확인) 물론 warning 을 무시하고 링크를 하여도 문제없이 프로그램을 잘 실행되었다. 그렇다면 무엇이 문제일까….먼저 C4761 에 관한 내용을 찾아 […]
리눅스에서 쓰레드를 생성하여 ID 값을 찍어볼때…. 다음과 같이 마이너스 값이 나오는 경우가 있다. 이와 같은 경우는 printf의 타입 값을 잘못 지정해서 생기는 현상이다. 보통은 다음과 같이 입력했을 것이다. (Language : c) pthread_t t_id; state = pthread_create(&t_id, NULL, thread_function, NULL); printf(“생성된 쓰레드의 ID : %d n“, t_id); 하지만 pthread_t 의 타입을 보면… 즉…..%lu 로 지정해야 […]
네트워크 프로그래밍을 하더도중…한가지 풀리지 않는 의문점이 생겨 KLDP 게시판에 글을 올렸다. 내용 보기 : http://kldp.org/node/90394 글을 올린지 30분도 채 안되서 답변이 올라왔다. 문제인즉… 다음과 같은 코드를 실행했을때… (Language : c) #include #include #include #include #include void error_handling(char *message); int main(void) { int fildes; FILE *fp; fildes […]
scanf 로 문자열을 받고 나면 공백으로 구분되서 남은 문자들이 아직 버퍼에 남아 있기 때문에… fflush(stdin); 을 해줌으로써 버퍼를 비워주는 프로그래밍 기법이 있다. 하지만 이것은 엄밀히 말하면 틀린것이다. 더 정확히 이야기하자면 VC 에서만(아마도..) 된다. 사용자들의 편의를 위해 VC에서 확장의 개념으로 만든것이라 생각하면 이해가 쉬울 것이다. 그렇다면 왜 이것이 안되는 것일까? C FAQ 12.26을 보면 다음과 같은 […]
Continue reading about 리눅스(Unix)에서 fflush(stdin) 사용시 발생하는 문제점.
참으로 골치아픈 문제였다. 하지만 답은 간단했다. 문제의 시작점은 gethostbyaddr() 함수를 호출하면서 시작됐다. 210.125.213.93 (본인 블로그의 IP)주소. 어라???안돼네?? 무슨 문제일까….. 211.115.77.213 (daum 의 IP 주소). 이것도 안되네?? 무슨 문제가 있나보다….나는 책에 나온 예제를 다시 하나하나 비교를 하면서 혹시 있을지 모를 미스타이핑을 찾아보았다. 그런데…없.었.다. 도대체 무엇이 문제일까… 한참 고민을 하다가 디버깅을 해보았다. 역시나….gethostbyaddr()함수를 호출하는 부분에서 에러가 발생했다. 이 함수의 […]
Recent Comments