본문 바로가기

Programming

sql tip 정리 ------------------------------------------------------------------- * Index hint 인덱스를 태운다 ------------------------------------------------------------------- table name + WITH(INDEX(인덱스이름)) + WITH(INDEX = 인덱스이름) ------------------------------------------------------------------- ex ) UPDATE BADUKUSER SET nMoney = @nSetMoney FROM BADUKUSER WITH ( INDEX = IX_nMoney ) WHERE nMoney 더보기
gdb 정리 gdb 기본 명령어 시작 gdb [프로그램명] ( 예 : gdb bugprg ) gdb [프로그램명][core파일명] ( 예 : gdb bugprg core.14998 ) gdb [프로그램명][실행중인 프로세스PID] ( 예 : gdb bugprg 14998 ) 종료 q ctrl + d 소스보기 lmain 함수 기점으로 소스출력 l 1010행을 기준으로 출력 l funcfunc 함수의 소스를 출력 l - 출력된 행의 이전행 출력 l file.c:func:file.c 파일의 func 함수 부분 출력 l file.c:10:file.c 파일의 10을 기준으로 출력 set listsize 20 출력되는 행수 20으로 변경 브레이크 포인트 생성 r 프로그램을 실행 ( r을 쳐서 실행후 메시지 우선확인후 bt명령으.. 더보기
linux 자주쓰는 명령어..정리 # 리눅스 버전 확인 cat /etc/issue cat /etc/SuSE-release # gcc 버전 확인 gcc -v cat /proc/version # cpu, mem 정보 확인 cat /proc/cpuinfo cat /proc/meminfo # ip 정보 확인 ifconfig # 리눅스 시간 강제 설정 날짜 변경 date -s 3/14/2011 시간 변경 date -s 12:00:00 crontab 관련 ----------------------------------- crontab -e -> 크론 수정 /etc/init.d/cron stop -> 크론 중지 /etc/init.d/cron start -> 크론 시작 ----------------------------------- 비번 cat /etc.. 더보기
리눅스 사용자 관련 명령어 사용자 생성 및 계정 관리 리눅스 내부 명령어 : 셀에 내장되어 있는 명령어로 셀이 명령어를 이해한다. 리눅스 외부 명령어 : /bin 안에 파일의 형태로 존재 차이점 : 내부 명령어의 실행 시 별도의 프로세서를 시작시키지 않지만, 외부 명령어의 실행 시 새로운 서브 프로세서를 fork하고 실행 검색 경로 지정 리눅스에서 명령어는 셀이 특정 검색 경로를 찾아 실행하게 되어 있다. 검색경로가 지정되어 있는 파일 : .bash_profile PATH = _______: _______: path에 지정된 경로에 자주 사용하는 명령어의 결로를 앞쪽에 두는 것이 좋다. path에 설정된 경로를 찾을 때까지 앞에서 뒤쪽으로 차례대로 검색 /etc/default/useradd : 사용자의 기본적인 셀 환경을 설정할 .. 더보기
CPPUNIT 테스트 * CPPUNIT_ASSERT(expr) : expr이 true일 때에만 테스트 통과 * CPPUNIT_ASSERT_MESSAGE(msg, expr) : 위와 같은. 메시지 지정 가능. * CPPUNIT_ASSERT_EQUAL(expected, actual) : expected와 actual이 같을 때에만 테스트 통과. operator==() 로 비교(맞나?) * CPPUNIT_ASSERT_EQUAL_MESSAGE(msg, expected, actual) : 위와 같음. 메시지 지정 가능. * CPPUNIT_FAIL(msg) : 이 코드를 만나면 테스트 실패. * CPPUNIT_ASSERT_THROW(expr, exceptionType) : expr이 exceptionType의 exception을 던지는.. 더보기
기초지식 정리 가상함수 - 어떤 메소드를 실제로 호출하는 객체가 어떤 클래스인지에 따라 구현이 결정되는 메소드를 뜻한다. class A { public: virtual void print() { cout print(); // "C" * 가상함수의 장점 : - 1. 실행시에 메소드를 선택할수 있다는 점. - 2. 추상메소드로 사용되며 다형성을 구현할수 있다는 점. class Bird{ public: virtual void fly() = 0; }; class Bidulgi : Bird { public: virtual void fly(){ cout fly(); * 가상함수의 단점 : 별도의 메모리의 사용, 오버헤드 - virtual 이란 키워드가 한개라도 붙은 클래스의 객체를 선언할경우, 그 클래스만을 위한 vtable( .. 더보기
IOCP 정리 IOCP ( Input Output Completion Port ) * 입출력 완료 포트 주요 개념 * 비동기 입출력 모델( Overlapped I/O ) * 여러 소켓들의 입출력을 적은 수의 쓰레드가 담당하게 하여 스레드간의 컨텍스트 스위칭을 줄이는 모델. * 읽기와 쓰기에 대한 IO를 먼저 수행하고 완료되었을때 통지(확인) 받는다. 1. completion port 생성 HANDLE completionPort = ::CreateIoCompletionPort( INVALID_HANDLE_VALUE, 0, 0, 0); 2. 서버 listen 소켓 생성후 listen SOCKET listen_sock = WSASocket( PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVE.. 더보기
SELECT 함수 정리 SELECT 함수는 멀티플렉싱 방식의 IO 모델이다. 즉 한 프로세스에서 여러개의 소켓을 관리하는 방식인데, 관심을 두고 싶은 소켓을 각각의 셋트( 읽기, 쓰기, 예외 )에 넣어서 변화를 감시하고, 변화가 일어났을때 IO 를 하는 방식이라는 것이다. 한마디로 풀어보자면, IO를 하라는 통지가 먼저 일어나고, 그 통지에 의한 각각의 IO 처리를 진행하는 방식이다. 리눅스 기반과 윈도우즈 기반의 SELECT 함수는 같지만 작동 원리가 약간 틀리다. 리눅스 기반부터 살펴보자. 리눅스의 fd_set 구조체 typedef struct { __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS]; } fd_set; __FD_SETSIZE 가 결정 하는듯한데. ulimit -a 에서 ope.. 더보기
리눅스 SIGPIPE 처리 비정상적으로 종료가 되어 닫혀 버린 클라이언트 소켓에 대고, send 를 할시 리눅스에서 SIGPIPE signal이 발생하여 서버 프로세스가 종료될 수 있다. signal을 무시하는 방법으로는 2가지가 있다. 1. 처음에 signal 함수를 호출하면서 SIG_IGN 인자를 넣어준다. signal(SIGPIPE, SIG_IGN); 2. send 함수를 호출할때 발생하므로 send함수의 맨 뒤에다.. MSG_NOSIGNAL 인자를 넣어준다. send( sock, msg, len, MSG_NOSIGNAL ); 더보기
compile - error 팁 ( Error 에러 팁 ) LIBCMTD.lib(_file.obj) : error LNK2005: ___initstdio already defined in LIBCD.lib(_file.obj) 1. Project Settings -> C/C++ -> Code Generation -> Use run-time library 를 Debug Multithreaded로 변경 2. Project Settings -> Link -> CateGory -> Input -> Ignore libraries 에 libcd.lib 넣는다 더보기