illegal seek error 에 대해서 알고싶습니다.....정말요...
글쓴이: majorofc / 작성시간: 목, 2004/06/03 - 4:06오후
처음으로 올리는 글이 질문이라 상당히 죄송스럽습니다.
c 프로그래밍 도중에 3~4개의 파일을 동시에 fopen() 하여 프로그래밍을
하다 fclose()로 닫는데 세그먼트 폴트가 나더군요.
그래서 perror(fp); 해보았더니
fclose(fp) : illegal seek
이라고 출력되네요....
지금 일주일째 이 문제에 대해서 고민하고 있습니다...
답변 부탁드립니다...
ps. 인터넷으로 찾아보니 google에 유사한 질문이 있었는데
영어에다가 저의 경우와는 좀 다른 내용이어서....이렇게 질문드립니다...
Forums:
짐작인데요,fclose에서 segment fault가 났다면 그
짐작인데요,
fclose에서 segment fault가 났다면 그 전 코드에서 해당 파일 포인터에 문제가
생긴거 같은데요...
코드가 없으니...후후...
https://nicesj.com
https://blog.nicesj.com
일부 소스 입니다....
전체 소스는 제 실력이 모자라서 vi 에서 어떻게 붙히는지 몰라서
에러나는 부분 일부분만 올려 드리겠습니다..
..
파일 이름 만들어서 오픈 할때,
오픈이 성공했는지 실패 했는지 검사 해주세요.
perror를 쓰실때에는
오류가 나는 부분에서 쓰시면 도움이 되요.
오류 확인이 가능한 함수를 사용할때라면 항상 오류 확인 코드를 써주시는게
후에 디버깅에 많은 도움이 될거 같아요...
// fread, fwrite, fseek 등의 함수도 오류 확인이 가능한거 같아요..
https://nicesj.com
https://blog.nicesj.com
말씀하신대로 fopen()을 제대로 검사했습니다.
검사한 결과 에러메세지가 뜨지 않는 것과 파일내의
데이터 처리는 정상적으로 처리되는 것으로 봐서는
정상적으로 열린 것 같습니다.
illegall seek 메세지는 다음과 같이 뜹니다.
이때 이상한 것은 fclose 순서를 바꾸어도 에러는 같은위치에서 난다는 것입니다.
좋은 답변 고맙습니다.
Re: 말씀하신대로 fopen()을 제대로 검사했습니다.
이런 식으로 perror를 쓰신거 맞지요?
이렇게 쓰면 순서가 바뀌지 않을거 같아요..
perror를 마지막에 몰아서 저렇게 쓰지 말고...
에러가 나서 에러 처리가 되어야 하는 루틴에 perror를 써보시면 어떻게 되요?
또 fseek 호출 함수 반환값도 확인하고 있는거죠?
또 fseek을 호출 한 후
errorno도 확인해 보세요,
EBADF가 설정되었다면 탐생가능 스트림이 아니라네요
EINVAL이 설정되었다면 인자가 잘못되었데요
https://nicesj.com
https://blog.nicesj.com
답변 해주신대로 [code:1]if(fclose(o
답변 해주신대로
fclose를 검사해 본 결과
바로 세그멘테이션 오류가 나더군요...
그래서 fclose의 perror부분을 다음과 같이 빼 보았더니....
역시 바로 세그멘테이션 오류가 나더군요.
fseek후의 errno검사는 0으로 아무런 이상이 없었구여.
fclose의 errno검사 결과 29가 나오네요..
그래서 헤더파일을 봤더니...
#define ESPIPE 29 /* Illegal seek */
이렇게 돼있네요 역시나 illegal seek으로 말이죠..
참 알 수가 없네요 정말......
다시한번 답변 고맙습니다.
저도 얼마전에 같은 현상을 발견했는데, 끝끝내 원인을 찾지 못하였습니다.
저도 얼마전에 같은 현상을 발견했는데, 끝끝내 원인을 찾지 못하였습니다.
gdb로 확인해 보았는데, 파일 포인터를 몇번 사용한 뒤, fclose를 해주지 않고 다른 작업을 하게 하다보면,
중간에 어느 순간 갑자기 파일 포인터의 내용이 변경 되는 에러였습니다.
원인을 찾다 찾다 포기했는데, 이번 기회에 저도 배울 수 있었음 좋겠습니다. ^^
fclose에서 에러가 난다고 보기 보다,파일 포인터에 문제가 생
fclose에서 에러가 난다고 보기 보다,
파일 포인터에 문제가 생겨서그런것 같습니다.
를 반드시 써주세요
잘 작동하는 것 "같다고" 하는건...
마지막으로
컴파일에..
로 하세요.
반드시. 위 코드를 모두 적용시켜 보세요.
https://nicesj.com
https://blog.nicesj.com
댓글 달기