컴퓨터활용/유닉스 64

U2L프로젝트 NULL 이슈

유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 리눅스에서는 sprintf 를 사용할 때도 유닉스와 다르게 동작해서 오류가 발생되는 경우가 있다. 유닉스에서는 멀쩡히 잘 돌아가던 프로그램을 리눅스에서 돌리면 오류가 발생되는 경우로서 sprintf()가 있다. memset(b, 0x00, sizeof(b)); sprintf(a, "name:%s" , b ); printf("%s\n", a ); 이런 소스의 경우 b 값이 NULL일 경우 유닉스에서는 아무 것도 찍히지 않는다. name: 이라고만 찍한다. 그러나 리눅스에서는 "(null)" 이라는 문자가 찍히게 되면서 name:(null) 이라고 찍힌다..

쉘에서 date 사용

기본 일자 포맷으로 출력할 때는 그냥 단순히> date -I 2020-02-22 date 명령어에서 포맷을 주려면 date뒤에 +로 시작한다. 포맷이 붙어 있을 경우 ' 로 감싸지 않아도 되지만 스페이스가 들어가면 ' 로 감싸줘야 한다.> date +'%F %T' 2020-02-22 13:23:53 $로 date 명령을 실행하여 변수처리를 할 수 있다.> echo $(date +%F_%T) 2020-02-22_13:24:23 > CUR_DATE=$(date +%F_%T) > echo $CUR_DATE 2020-03-21_13:34:23 동일한 효과를 얻을 수 있는 ` 문자로 date 명령을 실행할 수 있다.> CUR_DATE=`date +%F_%T > echo $CUR_DATE 2020-03-21_13:..

sprintf함수에서 포매팅 처리 방법

sprintf함수에서 포매팅 처리 방법을 실험해 봤다. 1) 숫자처리 %4d는 네 자리의 십진수를 표시하되 네 자리가 안될 때에는 공백으로 대체합니다. %.4d는 네 자리가 안될 경우 0으로 대체합니다. 2) 문자열 처리 %.10s 는 space_buf 값에서 최대 10문자만 출력합니다.이것은 %10s 처럼 중간에 쩜(.) 이 없는경우와 다릅니다.(.)이 없으면 즉 %10s 라면 무조건 자리를 10개 확보하고 그곳에 space_buf 의 값을출력하는데 만얀 space_buf 의 내용이 10개가 모라라면 나머지 공간은앞부분에 공백으로 남습니다. 그러나 %.10s 는 10개가 모자라도 공백을 주지 않고 바로 다음것을 이어서 씁니다. 예)printf([%d], 1234 ); ==> [1234] printf([..

ipcs, ipcrm 으로 공유메모리 삭제 방법

프로프레임에서 사용하는 쉐어드메모리는 TDL 과 Tcache 가 있다. 보통 이것은 티맥스 유저보다는 프로프레임 유저로 생성한다. 어느 유저로 생성하던 지간에 tdlinit 명령을 실행할 때는 tmdown 상태에서 하는 것이 좋다.생성된 공유메모리가 제대로 해제 되지 못 한 경우에 강제로 삭제하는 방법은 ipcrm 명령을 사용한다. 삭제하기 전에 ipcs 명령으로 현재 생성되어 있는 키값을 조회한다. 많기 때문에 user 로 grep 하여 범위를 줄여서 보면 쉽게 찾아 낼 수 있다. 아래 예제는 75000번을 키로해서 생성된 메모리를 삭제하는 절차를 보여주고 있다.문제의 키값을 찾았으면 ipcrm 명령으로 지워 주자. 쉐어드메모리 키는 생성한 유저로 삭제할 수 있다. 12345678910111213141..

pfmNumCalc 인자 개수 체크 쉘

| 개요 프로프레임에서 수식 계산에 사용하는 pfmNumCalc 라는 함수가 있다. 계산식을 자유롭게 기술할 수 있기 때문에 참 유용한 함수이고 많이들 사용한다. 그런데 문제는 파라미터 포매팅 개수와 아규먼트 인자의 개수가 다를 경우에 문제가 발생될 수 있다. 개수가 다를 경우에 어떤 예기치 않은 문제가 발생될 수 있기 때문에 꼼꼼하게 체크해야 하지만 워낙에 개발자들이 바쁘시다 보니 많이들 놓칠 수 있다. 쉘 프로그램을 이용해서 일괄적으로 한꺼번에 모든 프로그램의 인자 개수를 체크하는 로직을 만들어 봤다. 프로프레임 엔지니어나 일반 개발자들도 잘 응용해서 사용하면 유용할 거 같아서 공개한다. 필요한 부분을 수정해서 본인의 용도에 맞게 사용하면 좋을 것이다. | 아이디어pfmNumCalc 함수 뒤에는 포매..

Lock option has no effect for the map

프로프레임에서 사용하는 DBIO의 경우 select 하거나 fetch 할 때 pdb_lock 옵션을 이용할 수 있다. DBIO 스튜디오에서 Lock Query 생성을 체크하고 소스생성, 컴파일 할 때 생성된 SQL을 보면 WAIT 옵션이 뒤에 붙어 있는 것을 볼 수 있다. dbio 내부에서 sql을 실행하기 전에 input 의 pdb_lock 변수에 PDB_LOCK 값이 세트되어 온 경우에 SQL에 WAIT 절이 있는 지 체크하게 되고 SQL 에 WAIT 절이 없는데 LOCK option을 사용하겠다고 했을 때 "Lock option has no effect for the map" 메시지가 나오게 된다. 하지만 개발자가 dbio_in.pdb_lock = PDB_LOCK; 와 같이 코딩한 적도 없는데도 D..

dlopen error : Permission denied

프로프레임 환경에서 프로그램 실행시 [dlopen error Permission denied] 함수 [mxx_dacom_msg_deco]에 대한 dlcall이 실패하였습니다 [seq_no:14984545] 라는 메세시지를 만날 때가 있다. mxx_dacom_msg_deco.c 를 컴파일하여 libmxx_dacom_msg_deco.so 를 만들고 이 libmxx_dacom_msg_deco.so 를 dlupdate 한 후에 실행했을 때 나온 메시지 이다. libmxx_dacom_msg_deco.so 는야 dlupdate 될 때 $TDLDIR/run/ 아래에 복사되어 지므로 접근 권한이 없지 않겠지만libmxx_dacom_msg_deco.so 를 만들때 링크된 libclntsh.a, liblicense.a 라..

디렉토리 사용량 조회

디렉토리 사용량을 볼 때는 보통 du 명령을 많이 사용한다. 그런데 이렇게 du 명령을 사용하면 하위디렉토리까지 모두 표시되기 때문에 불편할 때가 있다. 내가 원하는 것은 특정디렉토리 하위의 디렉토리만 사용 사이즈를 구하고 싶기 때문이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/usr/bin/ksh if [ $# -eq 0 ]; then rootdir=./ else rootdir=$1/ fi for dir in `ls $rootdir` do if [ ! -d $rootdir$dir ]; then continue fi du -k -s $rootdir$dir 2> /dev/null done Colored by Color Scripter cs 11 line 에서 디렉토리가 ..

디스크 사용량 조회

디스크 사용량을 보는 명령은 df -k 을 사용한다. 이것을 좀 더 응용한 쉘 프로그램을 소개한다. AIX 에서는 df -k 명령을 이용하면 아래와 같이 나온다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ df -k Filesystem 1024-blocks Free %Used Iused %Iused Mounted on /dev/hd4 1048576 481888 55% 12328 11% / /dev/hd2 4718592 165192 97% 58400 56% /usr /dev/hd9var 14680064 4061824 73% 9015 1% /var /dev/hd3 10485760 7397560 30% 610 1% /tmp /dev/hd1 16777216 3857024 78% 8581..

반응형