본문 바로가기

개발 업무(코딩)-개발자였을때 썼던..79

여러 언어의 온라인 컴파일 가능 사이트 https://paiza.io/en 2023. 1. 8.
데몬 프로세스를 이용한 배치(batch) 기존에 소스코드를 이용해서 만들었다.(블로그 내에 있는 소스) 배치를 관리하는 테이블을 따로 만들어서 그 시간이 되면 알아서 배치가 돌아간다. 배치의 진행은 curl로 데이터를 txt파일로 떨구고 parsing이라는 함수에 들어가 테이블 스키마에 맞게 데이터를 insert해준다. 중간에 잘안됐는데 그 이유는 chdir("/")에 있었다. 경로를 루트로 설정해버리기 때문이다. 기존 소스에서는 상대경로로 들어갔었다. 절대경로로 맞췄더니 잘돌아간다. 위의 오류를 해결하고 나니깐 데몬프로세스가 강제종료되는 현상도 없어졌다. int main(int argc, char *argv[]) { int ret; int pid; MYSQL *conn_ptr; conn_ptr = db_init("ip", "id", "pwd".. 2023. 1. 8.
crontab 크론탭(배치, batch) 배치(batch)를 돌리기 위해서 간단히 크론탭을 사용해봤다. 유의사항은 * * * * * test.sh 라는 실핼시켜야할 크론탭잡이 잇다면 * *의 사이는 띄어쓰기로 구분되어있어야 한다. 아니면 안돌아간다. 실행파일에 바로 붙어서 실행이 잘안되서 쉘로 간단히 만들었다. /var/mail 이쪽에 print를 해놓으면 알아서 떨어진다. insert성공했을시 success print하면 들어간다. ​ crontab -e 로 작성 15 * * * * source /home/changjo/curl/parsing/test.sh ​ test.sh #!/bin/bash cd /home/changjo/curl/parsing ./a.out 정리가 잘되어있는 링크 https://jdm.kr/blog/2 ​ 2023. 1. 8.
c와 mariadb auto commit off / on 쿼리를 한번 할때마다 commit 하면 상당한 시간이 소요된다. 그렇기 때문에 오토커밋을 풀고 한번에 커밋을 해준다음에 다시 오토커밋을 on해준다. mysql_query(conn_ptr, "SET AUTOCOMMIT = 0"); // auto commit off // 소스 구현 mysql_query(conn_ptr, "COMMIT"); // 소스에서 실행시킨 쿼리들 한번에 commit mysql_query(conn_ptr, "SET AUTOCOMMIT = 1"); // auto commit on 2023. 1. 8.
c와 mariadb INSERT시에 한글 깨짐 현상 전부 UTF8로 세팅해서 했다곤 생각하는데 직접 INSERT 할때 한글이 깨져서 나왔다. 뭐가 됐든 코드 내에서 다시한번 세팅을 해줬다 ​ db_conn.c #include "changjo.h" MYSQL *db_init(char *ip, char *user, char *pw, char *db) { conn_ptr = mysql_init(NULL); if(!conn_ptr) { printf("error"); exit(0); } conn_ptr = mysql_real_connect(conn_ptr, ip, user, pw, db, 0, NULL, 0); if(!conn_ptr) { printf("cannot connect : %s\n", mysql_error(conn_ptr)); } mysql_set_ch.. 2023. 1. 8.
pthread에 관한 나만의 고찰 1. pthread_exit 를 한 후에는 printf등 함수가 안먹는다. 2. pthread_create 실행 라인에서 멈춰있지 않는다. -> 함수를 다 실행하고 밑에 라인을 실행하는게 아니다. 그래서 sleep을 주는것이다(thread작업이 끝날때까지 기다려주는 것, pause사용해도돼). sub thread들이 끝날때까지 기다려주지 않고 main프로세스가 죽어버리면 thread는 자신의 기능을 다하지 못하고 죽어버린다. 3. pthread_join을 통해서 종료를 기다릴 수 있다 -> 데몬프로세스일때 스레드종료 후 프로세스 종료를 하지 않기 때문에 각각의 thread를 detach로 죽인다.(업무) ​ 번외로 밑에 있는 소스 코드를 실행하기 위한 gcc gcc -o a.out test.c -lpth.. 2023. 1. 8.
pthread 스레드 종료시점에 관한 이야기 일반적으로 pthread_create를 통해서 쓰레드가 생성되고 다 사용된 쓰레드는 해당 쓰레드를 호출한 곳에서 pthread_join을 통하여 해당 쓰레드의 자원을 해제하여 종료하는 흐름을 갖는다고 한다.. ​ ​ 프로세스 흐름을 보며 pthread의 종료시점을 찾던 중 pthread_detach에 관해 찾았다. ​ ​ 이미 생성된 쓰레드에게 detach 옵션을 주어 독립적으로 자원을 반환 하도록 하는 방법이다. ​ ​ function { pthread_create(); ​ pthread_detach (pthread_id); pthread_exit ((void *)NULL); } ​ https://www.morenice.kr/75 ​ 2023. 1. 8.
Log에 라인번호 찍기(+파일명, +함수명) #include 를 이용하는 방법이 있다. ( /var/log/messages-날짜) ​ main.c #include #include // syslog사용하기위해서 int main() { printf(" 파일명: %s \n 라인번호: %d \n 함수명 : %s\n", __FILE__, __LINE__, __FUNCTION__); syslog(LOG_ERR, " 파일명: %s \n 라인번호: %d \n 함수명 : %s\n", __FILE__, __LINE__, __FUNCTION__); // 헤더파일 선언 되어있어야함 return 0; } https://qvil.github.io/linux/c-syslog/ ​ 2023. 1. 8.
동적라이브러리 만들기 tclock.c tclock.h gcc -fPIC -c libtclock.c gcc -shared -o libtclock.so libtclock.o -> 라이브러리 경로 같은걸 설정해야 돌아간다. https://www.joinc.co.kr/w/Site/C/Documents/Make_Library#AEN98 2023. 1. 8.
clock_t 를 이용한 c프로그램 시간측정 #include #include int main() { clock_t start, end; int i, sum; sum = 0; start = clock(); for( i = 0 ; i < 10000000 ; i++) sum+=1; end = clock(); printf("%d, time = %f\n", sum, (double) (end - start)/CLOCKS_PER_SEC); } https://acholyte.tistory.com/entry/C%EC%96%B8%EC%96%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%86%8D%EB%8F%84-%EC%B8%A1%EC%A0%95 ​ 2023. 1. 8.