반응형

전체 글 748

프로프레임 4.0 스튜디오 heap 메모리 부족 오류

프로프레임 4.0 스튜디오를 사용하다가 메모리 오버 플로우 가 나면서 heap 메모리가 부족하다는 오류가 발생될 경우가 있습니다. 종전에 알기로 eclipse.ini 에다가 옵션을 잡아 주면 되는 것으로 알았는데 실험해 본 바에 의하면 먹히지 않습니다. 대신 proframe.exe 를 실행하는 단축아이콘의 속성에 아래와 같이 Xms, Xmx 메모리를 지정하면 먹히네요. C:\TmaxSoft\ProFrameTP4.0\Studio\proframe.exe -clean -vmargs -Xms256m -Xmx512m 여기서 Xms 는 initaial heap memory size 이고 Xmx 는 Maximum heap memory size 입니다. 보통 1G 이상 메모리를 가지고 있는 노트북이라면 256으로 시작..

역류성 식도염에 좋은 음식

생활습관 개선으로 예방하기 역류성식도염의 만성적 특성을 고려해보면 생활습관 개선이 역류질환 예방에 도움을 줄 수 있습니다. 즉 과식하거나 식후 바로 누웠을 때, 고지방식 또는 알코올 섭취 후 역류가 잘 발생하므로 이런 습관을 버리는 것이 역류성식도염을 예방하는 방법입니다. 잠잘 때 머리를 15cm 정도 올려주면 야간 역류방지에 도움이 되며, 식후 2-3시간 이내에 눕지 말기, 과식을 피하고 규칙적으로 조금씩 자주 먹기, 흡연 삼가기, 카페인이나 초콜릿, 지방식의 섭취 줄이기, 체중 감량으로 복부 비만 조절하기, 복압을 높일 수 있는 조이는 옷 피하기 등도 역류질환 예방에 도움이 됩니다. 특히 과식 후 속이 더부룩하고 소화가 안 될 때 시원한 탄산음료나 커피를 마시는데, 이러한 습관은 식도위괄약근을 약화시..

카테고리 없음 2021.01.22

U2L프로젝트 sprintf 이슈

snprintf() 함수는 타겟배열버퍼에 일련의 문자와 값의 형식을 argument로 전달하여 저장할 수 있다. 아래의 샘플 예제를 실행했을 때 Unix와 Linux 에서 결과값이 다르게 출력되는 이슈가 있다. #include #include int main() { char str1[1024]; char buf[10]; memset(str1, 0x00, sizeof(str1)); memset(buf, 0x00, sizeof(buf)); strcpy(str1, "abcd"); strcpy(buf, "1234"); snprintf(str1, sizeof(str1), "%s%s", str1, buf); printf("str1 [%s]\n", str1); return 0; }이 프로그램을 Unix에서 수행했을 ..

카테고리 없음 2020.10.28

오라클 ORA-01002 오류 원인과 조치 방법

ORA-01002 오류가 발생되는 경우는 여러가지가 있을 수 있겠지만 최근에 만난 사례는 공유하면 좋겠다. 오라클에서 커서 Open 후에 rollback을 처음으로 만나게 되면 ORA-01002 오류 : fetch out of sequence 가 발생될 수 있다. 오라클의 경우 커서 오픈 후 바로 rollback 을 만나면 커서를 닫아 버리기는 경우였다. 이런 현상은 무조건 발생되는 것은 아니고 커서 오픈 전 DML 이 수행된 적이 있을 경우에 발생된다. 커서 오픈 전 수행된 DML 이 commit/rollback 으로 마무리 되지 않은 상태에서 커서가 오픈되고 rollback 을 처음 만나게 될 때 이전 DML 을 rollback 하면서 커서도 close 해 버린다. 커서 오픈 전에 DML 수행되었더라..

카테고리 없음 2020.09.17

리눅스 디렉토리 사용량

디렉토리별 사용량을 보려면 du 명령을 사용한다. 그런데 그냥 du 명령을 치면 하위 디렉토리까지 다 보여 주게 되므로 정신이 없다. 현재 디렉토리 기준으로 1 레벨만 보고 싶다면 --max-depth 옵션을 사용한다. du --max-depth=1 그러면 내가 접근할 수 없는 디렉토리의 경우 "허가 거부" 메시지가 뜨게 된다. 이런 거 지저분해서 보기 싫다면 du --max-depth=1 2>/dev/null "허가 거부" 등과 같은 오류 메시지는 화면으로 출력되지 않도록 한다. 디렉토리 사용량 크기별로 정렬해서 보면 편할 것이다. du --max-depth=1 2>/dev/null | sort -n 다른 이야기 지만 사용량을 byte 단위가 아닌 K, G로 보고 싶다면 -h 옵션을 사용한다.

U2L프로젝트 문자열 이슈

유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 그중에서 함수로 아규먼트를 넘길 때 문자열 이슈가 있다. 특히 readonly 문자열 값을 아규먼트로 넘길 때 끝처리에서 다르게 동작한다. 001: void function_test_str( char *str ) { 002: char tmp_str[100]; 003: size_t len; 004: 005: len = strlen(str); 006: strncpy( tmp_str, str, sizeof(tmp_str)); 007: tmp_str[len] = 0x00; /* 확실한 막음처리 */ 008: printf("len=[%u] str=[%s] tm..

U2L프로젝트 ltoa 이슈

IBM이나 HP 유닉스에서 사용했던 ltoa 함수를 리눅스에서는 지원하지 않는다. int형 변수의 값을 char 배열에 넣는 함수를 사용하고 싶다면 할 수 없이 sprintf() 함수를 사용하는 방법을 사용해야 한다. 하지만 ltoa() 는 바로 문자열 포인터를 return 받기 때문에 바로 사용하면 되었지만 sprintf() 를 사용할 경우 결과를 저장할 변수를 하나 선언해야하는 번거로움이 있다. sprintf(버퍼,"형식지정자", 값) 예를들어, long cnt = 400; char str[100]; sprintf(str, "%ld", cnt ); 라고 하면 버퍼에 문자열 400 이 들어간다. 프로그램내에서 빈번하게 사용된다면 매크로로 선언해 놓고 사용하는 것을 권장한다. #define LTOA( _..

U2L프로젝트 printf 이슈

포매팅으로 패딩하여 출력하거나 문자열을 구성할 때 동작의 차이가 있다. printf("[%06s]\n", "AB"); 라고 했을 때 유닉스에서는 0 이 좌패딩되었다. 그런데 리눅스에서는 스페이스가 좌패딩된다. printf() 는 출력하는 거라 로직에 영향을 미치지 않을 수 있다고 치더라도 포매팅을 사용하는 sprintf 도 동일한 현상이 발생된다. 이런 로직의 경우는 프로그램 속에 숨어 있어서 찾아내기 어렵기 때문에 꼼꼼한 테스트가 필수이다. printf 함수의 포매팅으로는 커버할 수 없기 때문에 별도의 함수를 만들어야 하기 때문에 상당히 번거롭게 된다.

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) 이라고 찍힌다..

U2L 프로젝트 fclose() 이슈

유닉스 프로그램을 리눅스로 변환할 때 발생되는 이슈들 1. 변수가 NULL 일 때 access 하면 코어덤프가 발생되다. 유닉스에서는 이렇게 민감하지 않아서 coredump 가 나지는 않았았으나 linux 에서는 변수가 NULL 일 때 참조를 하면 바로 coredump 가 발생된다. 예를 들어 유닉스에서는 fclose(fp); 후에 다시 fclose(fp); 를 호출해도 코어덤프 발생되지 않았으나 리눅스에서는 짤없이 죽는다. 그래서 wrapper 함수를 만들어야 한다. int fn_fclose(FILE *_fp) { if( _fp != NULL && _fp->_fileno >= 0 ) return fclose(_fp); return 0; } 여기서 file structure pointer 변수가 fclo..

반응형