프로그래밍/리눅스 프로그래밍 51

[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..

리눅스 프로세스별 메모리 사용량 확인법

리눅스 프로세스별 메모리 사용량 확인법 간단 root@localhost] # ps -o pid,pcpu,pmem,rss,vsz,cmd -p `pidof nginx` PID %CPU %MEM RSS VSZ CMD 1370 0.0 0.0 2304 141128 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; pid %CPU %MEM rss (kb) vsz (kb) cmd process id 시스템 전체 cpu사용량 시스템 전체 메모리 사용량 물리 메모리 가상 메모리 실행 명령어 프로세스 상세 리눅스 환경에서 프로세스별 메모리 사용량을 간단하게 확인할 수 있는 명령어입니다. ps -eo user,pid,ppid,rss,size,vsi..

Linux 분할 컴파일시 유의 사항.

분할 컴파일시 유의사항. 사전 지식 compile의 전체 과정 전처리(Preprocessing): 이 단계에서는 #include, #define, #if 등과 같은 전처리 지시어가 처리됩니다. #include 지시어를 통해 헤더 파일이 소스 코드 파일에 포함되며, #define 지시어는 매크로를 정의하고, #if 지시어는 조건 컴파일을 수행합니다. 컴파일(Compilation): 이 단계에서는 전처리된 소스 코드가 컴파일러에 의해 기계 독립적인 중간 코드(어셈블리 코드)로 변환됩니다. 컴파일러는 이 단계에서 소스 코드의 문법적 오류를 검사하며, 타입 체크와 최적화를 수행합니다. 어셈블리(Assembly): 이 단계에서는 컴파일러가 생성한 어셈블리 코드가 기계어로 변환됩니다. 이 과정에서 생성되는 기계어 ..

Bash Script 유용한 Tip

Bash Script 유용한 Tip파라매터 설정출처 : http://wiki.bash-hackers.org/syntax/peLooking for a specific syntax you saw, without knowing the name?Simple usage$PARAMETER${PARAMETER}Indirection${!PARAMETER}Case modification${PARAMETER^}${PARAMETER^^}${PARAMETER,}${PARAMETER,,}${PARAMETER~}${PARAMETER~~}Variable name expansion${!PREFIX*}${!PREFIX@}Substring removal (also for filename manipulation!)${PARAMETER#P..