본문 바로가기

C/C++

소켓통신함수 Socket close()와 shutdown() 차이 출처: http://iblog.or.kr/hungi/it/software/programing/466/comment-page-1#comment-2206 int close( int sockfd ); 소켓을 닫고 통신을 종료합니다. sockfd는 닫을 소켓 번호입니다.성공하면 0을 실패하면 -1을 반환합니다.닫힌 소켓은 더 이상 사용할 수 없습니다.내부적으로 TCP는 send buffer 와 recv buffer가 있습니다.만약에 close를 호출 하였는데 send buffer에 보낼 데이터가 남아 있으면그것을 모두 보낸 후에 앞서 설명 드린 TCP 연결 종료 절차를 따릅니다. 위 두 함수에는 좀더 볼 것이 있는데. 그것은 참조 카운터입니다.socket로 소켓을 열면 참조 카운터가 1 증가 합니다.그리고 다른.. 더보기
Windows Data Type https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx 더보기
[스크랩] C언어 가변인자(가변파라미터)를 사용해보자 출처 : http://norus.tistory.com/19#comment12673780 printf의 원형을 찾아보신 분이 계실지 모르겠지만, printf의 원형을 찾아보면 다음과 같습니다. int Printf (const char* Format, ...)(실제 정의되어 있는 부분과 약간 차이가 있을 수 있습니다.) 위에 보이시는 "..." 이 부분이 가변 인자 혹은 가변 파라미터라고 불리우는 것입니다. printf를 쓸 때 느끼셨겠지만, 파라미터로 아무것도 넘겨주지 않을 수도 있고, 여러개를 넘겨줄 수도 있습니다. 가변 인자가 무엇인지 알았으니 이제 차근차근 설명해 드리도록 하겠습니다. 우선, 가변 인자 함수를 만들기 위해서는 stdarg.h 헤더가 필요합니다. 이 헤더에 가변인자함수를 만들 때 필요한.. 더보기
wchar_t <-> char ※ 함수의 반환값을 받은 후, delete[] 해준다. wchar_t -> char char * ConvertWCtoC(wchar_t* str){ //반환할 char* 변수 선언 char* pStr ; //입력받은 wchar_t 변수의 길이를 구함 int strSize = WideCharToMultiByte(CP_ACP, 0,str,-1, NULL, 0,NULL, NULL); //char* 메모리 할당 pStr = new char[strSize]; //형 변환 WideCharToMultiByte(CP_ACP, 0, str, -1, pStr, strSize, 0,0); return pStr;} char -> wchar_t wchar_t* ConverCtoWC(char* str){ //wchar_t형 변수 .. 더보기
[C++]OpenGL, OpenCV를 이용하여, PNG파일 불러오기(초간단) OpenGL에서 투명한 이미지를 쓰기위해, mask를 이용하였다.(OpenGL 기본 제공이 Bitmap이다보니..) 하지만, mask를 이용하여도 외곽선 부분이 깔끔하지 못한 문제점이 발생하였다.libpng를 사용하려 했지만... 알수없는 오류가 계속 발생하여 사용 불가..ㅠㅠ그래서 OpenCV를 이용하여, PNG파일을 Load한 후, OpenGL에서 Alpha채널을 제외하고 출력하니, 투명하게 출력이 된다! //OpenCV 변수 선언IplImage *img = cvLoadImage ("Image/24.png", CV_LOAD_IMAGE_UNCHANGED); //두번째 매개변수가 중요하다! //OpenGL출력glEnable(GL_BLEND); //blend옵션을 활성화 한다.glBlendFunc(GL_S.. 더보기
[C언어] 문자열 치환함수 출처 : http://mwultong.blogspot.com/2006/10/c-string-replace-all.html char *replaceAll(char *s, const char *olds, const char *news) {char *result, *sr;size_t i, count = 0;size_t oldlen = strlen(olds); if (oldlen < 1) return s;size_t newlen = strlen(news); if (newlen != oldlen) {for (i = 0; s[i] != '\0';) {if (memcmp(&s[i], olds, oldlen) == 0) count++, i += oldlen;else i++;}} else i = strlen(s); re.. 더보기
포인터 가끔 까먹는다.포인터 배열은 배열처럼 써서는 안됨.*p+i*(p+i) = (char*)malloc(sizeof(char)*10);strcpy(*(p+i), temp); 더보기
scanf() newline 문제 scanf("%c", &ch) -> 이런식으로 하나의 문자를 입력받고자 하는 경우, 문자를 입력 후 엔터키를 치는 순간 문제가 발생할 수 있다. 바로 엔터키의 newline(\n)도 문자로 인식해 버린다는 것. fflush()함수를 쓸 수도 있지만, visual c++ 기반의 Windows에서는 효과가 있는 반면, gcc 기반의 환경에서는 동작을 보장하지 못한다. 해결책 : scanf(" %c", &ch) 이렇게, %c앞에 공백을 하나 집어 넣으면, space문자, tab 문자, newline 문자 등 제어문자를 무시할 수 있는 역할을 한다. 더보기