반응형
유닉스 프로그램을 리눅스로 변환할 때 발생되는 이슈들
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 변수가 fclose 후에도 NULL 로 변하지 않는다. Unix 에서는 if( _fp != NULL ) fclose(_fp); 해도 문제 없었지만 리눅스에서는 _fp 자체가 NULL이 아니기 때문에 비교조건문에서 통과되고 막상 fclose() 함수 안에서 죽어버리게 된다. 그래서 구조체안의 _fileno 값을 비교하여 file descripter 가 해제되었는 지 여부를 식별한다. fclose() 가 제대로 수행되었으면 _fileno 값은 -1 이 된다.
<2020.05.19>
반응형
'컴퓨터활용 > 리눅스' 카테고리의 다른 글
U2L프로젝트 ltoa 이슈 (0) | 2020.05.26 |
---|---|
U2L프로젝트 printf 이슈 (0) | 2020.05.19 |
티맥스 서버가 수행중 죽을 때 (0) | 2019.11.07 |
리눅스 민트 설치 (1) | 2017.04.15 |
우분투 기본언어 설정 (0) | 2017.02.19 |