검색결과 리스트
분류 전체보기에 해당되는 글 39건
- 2013.12.24 [offsetof] offset(위치) 계산하기
- 2013.12.17 [strchr][strrchr] 문자열에서 특정 문자 위치 찾기
- 2013.12.17 [strsep] 문자열 분리 함수
- 2013.12.13 [toupper][tolower] 소문자,대문자 변환하기
- 2013.12.12 간단한 백업 쉘-스크립트 작성
글
데이터베이스를 구축하는데 있어 자료구조는 공간관리 파트에서만 하면 될 줄 알았는데..
내 작업 범위에 자료구조의 이해가 필요한 부분이 있었다.
lr parser가 아직 미구현되어 있어 대충 if ~ then ~으로 비슷하게 동작하는 parser를 구현해두었는데 여기서 offset을 입력해야 한다.
이에 대해 정확하게 하기 위해 조금 알아보니 시스템 별로 다르기도 하단다;;;;;
여튼 일단은 linux에서 구현하는 중이라 linux에 국한된 offset 계산법을 알아야 한다.
이를 공부하기 위해서 문헌을 찾아보는게 가장 좋지만 몸으로 계산해서 규칙을 찾아내 보려고 한다.
물론 대강의 규칙은 수석연구원분이 이미 알려주셨기에 가능했다.
offset을 알아내는데 쓰인 offsetof 매크로이다. 간단한 예제를 아래와 같이 작성했다.
#include <stddef.h> #include <stdio.h> struct foo { short s; int i; double d; float f; long l; char c[10]; }; int main() { printf("short size:%lu offset:%lu\n", (unsigned long)sizeof(short), (unsigned long)offsetof(struct foo, s)); printf("int size:%lu offset:%lu\n", (unsigned long)sizeof(int), (unsigned long)offsetof(struct foo, i)); printf("double size:%lu offset:%lu\n", (unsigned long)sizeof(double), (unsigned long)offsetof(struct foo, d)); printf("float size:%lu offset:%lu\n", (unsigned long)sizeof(float), (unsigned long)offsetof(struct foo, f)); printf("long size:%lu offset:%lu\n", (unsigned long)sizeof(long), (unsigned long)offsetof(struct foo, l)); printf("char size:%lu offset:%lu\n", (unsigned long)sizeof(char[10]), (unsigned long)offsetof(struct foo, c)); return 0; }
'개발관련 > 시스템함수' 카테고리의 다른 글
[tcgetattr] 터미널 속성 함수 (0) | 2015.04.10 |
---|---|
[system] OS 명령 수행 함수 (0) | 2014.02.14 |
[strchr][strrchr] 문자열에서 특정 문자 위치 찾기 (0) | 2013.12.17 |
[strsep] 문자열 분리 함수 (0) | 2013.12.17 |
[toupper][tolower] 소문자,대문자 변환하기 (0) | 2013.12.13 |
설정
트랙백
댓글
글
문자열에서 특정 문자의 위치를 찾는 함수로 strchr이 있다. 단점이라 하면 한글자의 문자만 찾을 수 있는 것 같다.
원형이 아래와 같다.
char* strchr(const* s, int c);
대충 간단하게 아래 예제와 같이 쓰면 된다. 문자열에서 검색할 문자가 검색되지 않는다면 NULL을 리턴한다. strrchr은 뒤부터 검색하여 위치를 알려준다. 또, memchr이란 함수도 있는데 비슷할거라 생각한다.
#include <string.h> void main() { char string[] = "abcdcfg"; char* i; i=strchr( string, 'c' ); printf("##%d, %s\n", i-string, i); i=strrchr( string, 'c' ); printf("##%d, %s\n", i-string, i); }
'개발관련 > 시스템함수' 카테고리의 다른 글
[system] OS 명령 수행 함수 (0) | 2014.02.14 |
---|---|
[offsetof] offset(위치) 계산하기 (0) | 2013.12.24 |
[strsep] 문자열 분리 함수 (0) | 2013.12.17 |
[toupper][tolower] 소문자,대문자 변환하기 (0) | 2013.12.13 |
[trim] trim을 만들어보자 (0) | 2013.12.04 |
설정
트랙백
댓글
글
strtok을 사용하다가 1번만 자른 뒤 나머지가 필요한 경우가 생겼다.
그래서 뒤적이다 보니 strsep라는 또다른 분리 함수를 찾았다. 하지만 이걸로도 해결은 불가능 했다.
원했던 만큼만 분리 후 나머지를 취할 수는 있었지만 strtok과는 다르게 구분자로 된 문자열을 통째로 분리하지 못했다. 이전에 포스팅 했던 strtok 샘플과 비교해보면 눈에 띄는 차이를 알 수 있다.
샘플은 이전 strtok 때 썼던 것을 재사용했다.
#include <STRING.H> int main( ) { char* token = NULL; char* str = NULL; char str1[] = " ! This is\tStrtok,Test Program!!!! end\n"; char str2[] = " ,\t\n!"; str = strdup( str1 ); token = strsep( &str, str2 ); while( token != NULL ) { printf( "token = %s", token ); putchar( '\n' ); token = strsep( &str, str2 ); } printf("검색이 완료된 원본 문자열 : %s\n",str1); str = strdup( str1 ); token = strsep( &str, str2 ); printf( "token = %s", token ); printf( "seped = %s", str ); return 0; }
'개발관련 > 시스템함수' 카테고리의 다른 글
[offsetof] offset(위치) 계산하기 (0) | 2013.12.24 |
---|---|
[strchr][strrchr] 문자열에서 특정 문자 위치 찾기 (0) | 2013.12.17 |
[toupper][tolower] 소문자,대문자 변환하기 (0) | 2013.12.13 |
[trim] trim을 만들어보자 (0) | 2013.12.04 |
[strtok] 문자열을 구분자를 이용하여 분리하기 (0) | 2013.11.19 |
설정
트랙백
댓글
글
문자열을 소문자 혹은 대문자로 일괄 변환하고 싶을 때 아래와 같이 썼다.
for( j=0;j<( int )strlen( aComStr->tok[i] );j++ ) { if( aComStr->tok[i][j] >= 'A' && aComStr->tok[i][j] <= 'Z' ) { aComStr->tok[i][j] +=32; } }
하지만 이미 제공되는 함수가 있었다....아래는 그 예제이다.
#include <string.h> int main() { char str[1024]; strcpy( str, "Hello World 1234"); int i; printf("before : %s\n", str); for (i=0; i< (int)strlen(str); i++) { str[i]=toupper(str[i]); } printf("after1 : %s\n", str); for (i=0; i< (int)strlen(str); i++) { str[i]=tolower(str[i]); } printf("after2 : %s\n", str); }
'개발관련 > 시스템함수' 카테고리의 다른 글
[strchr][strrchr] 문자열에서 특정 문자 위치 찾기 (0) | 2013.12.17 |
---|---|
[strsep] 문자열 분리 함수 (0) | 2013.12.17 |
[trim] trim을 만들어보자 (0) | 2013.12.04 |
[strtok] 문자열을 구분자를 이용하여 분리하기 (0) | 2013.11.19 |
[isdigit] 문자열 검사 함수 is~ (0) | 2013.11.19 |
설정
트랙백
댓글
글
회사 svn이 워낙 중요한 데이터가 있다보니 백업의 중요도가 상당하다...
그래서 매일 백업을 해 특정 저장 공간에 보관하려고 하는데 쓰려고 간단하게 쉘을 하나 작성하였다.
대단한건 아니고 svn 저장소를 통째로 압축하여 전달하는 역할이다. 이 쉘 스크립트는 이전 회사에서 부터 써오던 쉘스크립트를 내가 맘데로 변형 발전시켜온 것인데...토대가 되는 쉘 스크립트의 저작권은 아마도 전 회사에 귀속되어있을테니 이거 가지고 '너 고소!' 하면 할말은 없을지도....
설마 그정도로 쓰래기 짓을 하겠냐 하는 분도 있겠지만 지금 하는 행태로 봐선 쓰래기들이 쓰래기짓하고 있음.
#!/bin/sh # 변수 등록 _DATE=`date '+%Y%m%d'` _LOG_TIME=`date '+[%Y/%m/%d %H:%M:%S]'` _EX_DAY=2 _BACKUP_DIR=$HOME/BACKUP _LOG_DIR=$_BACKUP_DIR _BACKUP_FILE=svn_backup _LOGFILE=$_LOG_DIR/svn_backup.log _LOGGING() { echo "[`date '+%Y/%m/%d %H:%M:%S'`] $*" >> $_LOGFILE } if [ ! -d $_BACKUP_DIR -a ! -x $_BACKUP_DIR ] then echo "mkdir $_BACKUP_DIR" mkdir $_BACKUP_DIR if [ $? -ne 0 ] then echo "Error : mkdir $_BACKUP_DIR" >&2 exit 1; fi fi if [ ! -d $_LOG_DIR -a ! -x $_LOG_DIR ] then echo "mkdir $_LOG_DIR" mkdir $_LOG_DIR if [ $? -ne 0 ] then echo "Error : mkdir $_LOG_DIR" >&2 exit 1; fi fi # 기간이 만료된 백업 삭제 find $_BACKUP_DIR -type f -name "${_BACKUP_FILE}_*" -mtime +$_EX_DAY -exec rm -f {} \; # 백업 시작 _LOGGING "SVN BACKUP START!" killall svnserve >> $_LOGFILE 2>&1 if [ $? -eq 0 ] then _LOGGING "SVN SERVICE STOP SUCCESS!" else _LOGGING "WARNING! SVN SERVICE NOT RUNNING." #exit 1; fi ps -ef | grep -v grep | grep "svnserve -d" >> $_LOGFILE 2>&1 if [ ! $? -eq 1 ] then _LOGGING "WARNING! DETECT SVNSERVE PROCESS." #exit 1; fi #tar -cf - $HOME/svnrepo | gzip -c - > ${_BACKUP_DIR}/${_BACKUP_FILE}_${_DATE}.tar.gz if [ $? -eq 0 ] then _LOGGING "SVN BACKUP SUCCESS!" else _LOGGING "WARNING! SOME PROBLEM IN BACKUP JOB." exit 1; fi _LOGGING "SEND TO REPOSITORY!" scp ${_BACKUP_DIR}/${_BACKUP_FILE}_${_DATE}.tar.gz svn@dev2:~/BACKUP/. if [ $? -eq 0 ] then _LOGGING "SEND SUCCESS!" else _LOGGING "WARNING! FAIL TO SEND BACKUP." #exit 1; fi svnserve -d -r /home/svn/svnrepo if [ $? -eq 0 ] then _LOGGING "SVN SERVICE START SUCCESS!" else _LOGGING "WARNING! FAIL TO START SVN SERVICE." #exit 1; fi _LOGGING "SVN BACKUP END!"
저장소 장비에서는 특정 기간이 만료된 백업을 제거하는 쉘을 수행해야 한다.
_EX_DAY=7 _BACKUP_DIR=$HOME/BACKUP _BACKUP_FILE=svn_backup # 일주일이 지난 백업 삭제 find $_BACKUP_DIR -type f -name "${_BACKUP_FILE}_*" -mtime +$_EX_DAY -exec rm -f {} \;
이제 crontab에 등록해보자. crontab에 최빈시에 백업이 수행되도록 등록만 하면 된다. 사내 장비는 아직 특별한 것이 없으므로 임의로 새벽 1시에 수행되게 설정하였다.
0 1 * * * ~/BACKUP/svn_backup.sh
'운영체제, 환경 > 쉘 환경' 카테고리의 다른 글
oracle sqlldr 용ctl(control file) 파일 만들기 (0) | 2016.06.22 |
---|---|
[Fedora Core] dnf를 이용해서 vim 설치하기 (0) | 2015.10.15 |
[Fedora Core] runlevel 변경하기 (0) | 2015.10.15 |
rsa를 이용한 원격 로그인 및 그외의 secure 툴 이용하기 (0) | 2013.12.12 |
vim 창분할 설정 (0) | 2013.10.11 |
RECENT COMMENT