티스토리 뷰

컴퓨터활용/리눅스

U2L 프로젝트 fclose() 이슈

멜번초이 멜번초이 2020. 5. 19. 16:46

유닉스 프로그램을 리눅스로 변환할 때 발생되는 이슈들

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
U2L 프로젝트 fclose() 이슈  (0) 2020.05.19
티맥스 서버가 수행중 죽을 때  (0) 2019.11.07
리눅스 민트 설치  (1) 2017.04.15
우분투 기본언어 설정  (0) 2017.02.19
댓글
댓글쓰기 폼