파일 입출력시 횟수에 제한이 있는지요.
글쓴이: tandem / 작성시간: 일, 2004/11/14 - 5:22오후
suse 9.1사용자입니다.
동영상을 읽어서 처리하는 프로그램인데요,
한 프레임씩 읽을때마다
내부적인 로직에 의해서 텍스트파일들이 새로 생성되거나,
기존파일들을 update하게 됩니다.
결과적으로 한 프레임당
해당되는 텍스트파일들에 대해 fopen, fclose를 20~30 회 정도
해 주게 되는데요,
프로그램이 300프레임을 넘어가면, 세그멘테이션 오류가 나는데,
이유가 새로운 파일을 생성하지 못하기 때문입니다.
FILE *out = fopen("test.dat", "w")
이런식이라고 한다면 out=NULL이 되어버리는 것이죠.
파일 입출력 횟수가 너무 많이 반복되어서 그럴수도 있는지요?
도움 부탁드립니다.
Forums:
fclose 는 안하시나보죠?
fclose 는 안하시나보죠?
아니요.. fclose는 꼭 해주고 있는데요..
아니요.. fclose는 꼭 해주고 있는데요..
짧은시간에 많은 파일을 여시는듯 한데오픈된 파일이 너무 많이서 그런것
짧은시간에 많은 파일을 여시는듯 한데
오픈된 파일이 너무 많이서 그런것 아닐까요?
확인해 보시고 파일수를 늘려주세요.
한 프로세스 당 file descriptor 숫자가 32개로 제한되어있는
한 프로세스 당 file descriptor 숫자가 32개로 제한되어있는 걸루 알고 있습니다. 것두 DESCRIPTOR_MAX 뭐 이런걸루 제한되어있겠죠... (저도 자세히는 모르겠습니다.)
남으로 창을 내겠소.
밭이 한참갈이 괭이로 파고 호미론 김을 메지요.
구름이 꼬인다 갈리있소. 새들의 노래는 공으로 들으랴오.
강냉이가 익거든 와자셔도 좋소.
왜 사냐건 웃지요.
파일 디스크립터의 limit를 보시길 바랍니다.ulimit -a
파일 디스크립터의 limit를 보시길 바랍니다.
ulimit -a <-- 솔라리스 명령인데 리눅스에서도 맞는지 모르겠습니다.
대개 리눅스 배포판의 파일 디스크립터 수는 1024인걸로 알고 있는데요.
영상 처리를 하는 중 fopen에서 (아직 닫히지 않은 디스크립터 + 열려 있는
디스크립터)의 수가 max를 넘어서지 않을까 싶습니다.
예전에 솔라리스 5.7에서 서버를 짜다가 일정수 클라이언트가 접속시 님과
같은 문제가 발생한 적이 있었습니다. 디스크립터의 max가 64더군요.
파일디스크립터의 limit 문제일 수도 있으니 한번 확인해 보세요.
open할때 카운터 변수+1 , close 할때 카운터 변수-1 하시면서 디버깅
해보시면 도움이 되지 않을까요.
아.. limit는 변경하실 수 있습니다. getrlimit , setrlimit를 사용하시면 됩니다.
아지랑이류 초환상 공콤 화랑... 포기하다.. T.T
댓글 달기