프로그래밍 104

[자료 구조] 1. 필요성.

자료 구조의 필요성 필자는 우선 현재 6년차 C언어를 주력으로 하고있는 개발자이다.현 시점에서 대학교 때 배웠던 자료구조를 다시 공부하려고 한다. 1. 나는 왜 자료 구조를 다시 공부하려고 하는가?? 올해 초 회사에서 코딩을 하다 보니, 프로그램의 성능을 향상 시켜야 하는 일을 맏게 되었다. 그래서 성능을 향상 시킬 방법을 고민하기 시작했다. 그런데.. 맙소사.. 방법으 잘 모르겠더라...OTL, 정말 충격이 였다. 여태 껏 프로그래밍을 하면서 내가 생각하는건 다 구현 할수 있는 수준까지 되었으나. 정작 성능 향상시키는 것에서 막힌 것이다. 그래서 어떻게 게하면 프로그램의 성능을 향상 시킬수 있는지 찾아보았다. 여러 가지 방법이 있었다. 그중 대표적인 것으로 multi threading이 존재하고, 전역..

[libcurl] libcurl + openssl + multi thread 처리에 대한 고민

*무단으로 퍼가지 마세요.* libcurl + openssl + multi thread에 대한 정리 이번 글은 curl을 multi threading 기반으로사용시 발생하는 문제점을 정리 하려고 한다. 1. curl을 multi thread처리가 되어있는가?? - 내가 생각하는 multi thread라 여러 Thread가 각자의 connection을 만들고 이후 작업을 동시에 수행해야한다. - curl 공식 홈페이지에 가보면 "libcurl is thread safe but has no internal thread synchronization: libcurl은 쓰레드에 안전하다. 그러나 내부 쓰레드 동기화는 없음(이게 뭔 개소리인지.) 결국 사용자가 lock걸로 알아서 동기화 해서 쓰라고함 - 결론 li..

[메모리] share memory 사용법

1. Shared memory 리란? - IPC(Inter-Process Communication) 의 일종으로 프로세스간 통신 할때 사용한다. 2. 데이터 공유 방식 - 커널에 생성된 공유 메모리를 통해서 프로세스간 데이터를 공유한다. - 공유된 메모리 영역을 통해서 통신이 가능하다. - 단순히 공유 메모리를 point 함으로써 프로세스에서 사용되는 메모리가 증가되지는 않는다. 3 . shared memory를 사용하기 위해서 필요한 헤더 및 함수 1)헤더 - #include - #include 2) 함수 - int shmget(key_t key, int size, int shmflg) => shared memory 생성 또는 가져오는 함수 - void *shmat( int shmid, const vo..

[libcurl] 사용법 및 connection 유의 사항

1. libcurl의 openssl 버전 확인 방법 및 업그레이드 방법 [localhost]$ curl --versioncurl 7.49.1 (x86_64-pc-linux-gnu) libcurl/7.49.1 OpenSSL/1.0.1e zlib/1.2.8Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 2. libcurl compile옵션 설정 (1)./Configure ex) ./configure --disable-shared --disable-ldap --without-zlib --with-ssl="openssl 설치 경로" --prefix=/usr/local/c..

[libcurl] post data 전송

1. crul post data보내는 방법 - 전체 코드는 sameple프로그램을 보자. - post데이터 전송시 data 크기를 지정해 주지 않을경우 data부분은 strlen으로 계산 하여 보낸다. - post데이터 전송시 data 크기를 지정해 주었을경우 지정하 크기만큼 본낸다. 이를 이용하여 post data부분에 구조체 정보를 담아 보낼수 있다. if(curl){curl_easy_setopt(curl, CURLOPT_URL, send_query); } if( dsize > 0 ){ //dsize는 보낼 post data의 크기 /* Now specify the POST data */ curl_easy_setopt(curl, CURLOPT_POST,1L); curl_easy_setopt(curl,..

[bash] 가장 혼란 스러운 문법정리

[ 변수 정리 ] 1. ${variable} 과 $variable 의 차이 점 - ${variable}을 사용시 변수에대한 직접 적인 세부 조작이 가능한다. array="TEST" echo "$array:0:1" => 결과 : TEST:0:1 echo "${array:0:1}" => 결과 : T [ 비교 문 정리 ] 1. 문자열 비교 if [ ${variable} = 10 ] VS if [ "${variable}" = 10 ] - 차이 전혀 없다. - 문자 비교 연상자 " = != " 사용시 양쪽 모두 string으로 인식하여 처리하기 때문이다. - 나름의 권고 : 문자 비교시 ""를 붙이자. 2. 숫자 비교 if [ ${variable} -eq 10 ] VS if [ ${variable} -eq "10..

sqlite3 exec에대한 대체 사용법

sqlite3사용시 우리는 대부분 sqlite3_exec를 사용하는데 이게 성능을좀 잡아 먹는다고 한다.그래서 에 대한 대체 방법은 sqlite3_exec를 구현하는데 사용되는 함수를 사용하는 것이다. 그 사함수들은 다음과 같다. - sqlite3_prepare_v2() 혹은 그와 비슷한 함수로 object를 생성한다.- sqlite3_bind_*() 함수로 SQL 결과값을 host_parameter 로 바인딩한다.=> sqlite3_step(pStmt); 실행전 pStmt에 값을 세팅하기 위해서 사용함=> sqlite_bind의 종류는 https://www.sqlite.org/c3ref/bind_blob.html를 참조- sqlite3_step() 함수로 SQL 문을 하나씩 실행시킨다.- sqlite3..

프로그래밍 2017.05.17