본문 바로가기

메모장/리눅스

리눅스 c++ 메모 끄적끄쩍

what the penguin say?

주제 없이 모아놓고 ctrl + F 로 찾아보려고 만듬


소켓 종료함수 소켓 닫기 소켓 닫을때 close와 shutdown차이

close -> 소켓 종료 함수. 성공하면 0, 실패하면 -1 반환.
shutdown
-> 소켓 종료 함수. how_to 옵션에 따라 read buffer와 write buffer중 어떤 것을 차단할지 선택. 성공 0,실패 -1

int close(int socket_fd);
int shutdown(int socket_fd, int how_to);

how to 상수

  • SHUT_RD : recv buffer 만 차단
  • SHUT_WR : send buffer 만 차단
  • SHUT_RDWR : 둘다 차단.

TCP 소켓 옵션 TCP socket 옵션

TCP 소켓 SO_LINGER 옵션 -> 소켓 종료시 송신 버퍼의 내용이 모두 전송 된 것이 확인 될때 까지 응용프로그램으로의 복귀를 지연하는 옵션. (기본은 소켓 종료시 송신버퍼 마지막에 FIN 패킷을 추가하고 바로 응용프로그램으로 복귀. 이후 작업은 커널에서 함)

// linger 구조체
struct linger
{
     int l_onoff;                        // linger 옵션 설정(l_onoff = 1), 해제(l_onoff=0)
     int l_linger;                       // linger timeout
}

//ex)
struct linger optval;
optval.l_onoff = 1;
optval.l_linger = 10;
setsockopt(sock, SOL_SOCKET, SO_LINGER, (char*)&optval, sizeof(optval));

참조 : https://m.blog.naver.com/PostView.nhn?blogId=bringmelove1&logNo=119145244&proxyReferer=https:%2F%2Fwww.google.com%2F


문자열을 정수형으로 변환 문자열을 변환 int형으로 변환 int를 문자열로 변환 int를 string으로 변환 int를 char*로 변환 char*를 int 형으로 변환 실수형 변환

atoi() 함수 -> 문자열을 int 형으로 변환하는 함수 (헤더 : stdlib.h)

int atoi (const char* str);
double atof (const char* str);
long atol (const char* str);
long long atoll (const char* str);

itoa() 함수 -> 정수형을 문자열로 변환하는 함수. 비표준함수(MS에서만 사용가능. linux, mac os 사용 불가) (헤더 : stdlib.h)

따라서 리눅스에서 정수형을 문자열로 변환 할때는 sprintf 함수를 사용한다.

// ex)
a = 10;
char str[100];                         //문자열 길이가 100

printf("a : %d\n", a);                 // printf는 콘솔 화면에 "a : 10" 이라고 찍는다
sprintf(str, "a : %d\n", a);           // sprintf는 str 문자열에 "a : 10" 이라는 문자열을 할당한다

printf("%s", str);                     // str 에 문자열이 제대로 들어갔는지 확인

참조 : https://norux.me/24


메세지 큐 메시지 큐 메세지큐 메시지큐데이터 전송

msgget 함수 -> 메시지 큐를 생성하는 함수. 메시지 큐 식별자 반환. 실패시 -1 반환.
msgsnd 함수 -> 메시지 큐로 데이터를 전송하는 함수. 성공 0 실패 -1.
msgrecv 함수 -> 메시지 큐에 저장된 자료를 읽어오는 함수. 성공 0 실패 -1.

int msgget ( key_t key, int msgflg );
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

참조 : http://forum.falinux.com/zbxe/index.php?mid=C_LIB&page=3&document_srl=420147


DB접속시 세션 재접속 후 인코딩 문제가 발생한다면 연결 옵션 확인.

연결 옵션을 통해 인코딩을 설정 하지 않고 연결 후 인코딩을 UTF-8로 바꿔주면, MYSQL_OPT_RECONNECT 옵션에 의해 다시 연결될 경우 기본 인코딩인 Latin으로 되돌아감.

    mysql_options(&DBCon, MYSQL_SET_CHARSET_NAME, "utf8");
    mysql_options(&DBCon, MYSQL_INIT_COMMAND, "SET NAMES utf8");

위 옵션을 사용하여 연결.