출력의 redirection 결과로 생성된 파일에 크기의 제한이 있는지요?
연결 리스트의 내용을 출력하는 함수가 있습니다.
이 함수가 정상적으로 작동합니다.
즉, 화면에 연결 리스트의 마지막 요소까지 다 출력이 됩니다.
그런데.. 출력을 result 라는 파일로 redirection 을 시켜주니, 생성된 result 파일에 원래 출력 내용의 2/3 정도만 담겨있습니다.
이게... 처음에 전 프로그램에 오류가 있는 거라고 생각을 했는데.. 그건 아닌 거 같구요.. 혹시 redirection 결과 생성되는 파일에 크기의 제한이 있는 건 아닌가 하는 생각에 여쭤봅니다.
시험용으로 printf("%d\n",i)을 10000번 수행하는 루프를 만들어서 돌려봤거든요..(아래 참조)
int i=0;
while(i < 10000)
{
printf("%d\n",i++);
}
역시나 그냥 수행하면 정상적으로 9999까지 출력이 되는데.. result 파일로 출력을 redirection 하니 약 8500 (?) 정도까지만 찍히고 맙니다..
아래는 연결 리스트의 출력을 담당하는 print_list 함수의 소스입니다.
int print_list(addr_list_entry *list_head)
{
addr_list_entry *entry=(addr_list_entry *)malloc(sizeof(addr_list_entry));
entry=list_head -> next;
printf("\n");
while(entry->next != NULL)
{
printf("%s\n",entry->url);
entry=entry->next;
}
free(entry);
return 0;
}
맞게 추측하고 있는 건지 모르겠네요..^^;;
물론 무제한일 수는
물론 무제한일 수는 없겠지만 0부터 9999까지 저장은 가능할텐데요?
확인은 어떻게
확인은 어떻게 하셨나요? tail -f로 하셨다면 프로그램 종료 전에 fflush(stdout);를 해보시면 어떨까요?
그냥 파일을 열어봤습니다..^^;;
답변 감사합니다..
그냥 vi result 해서 파일을 열어봤습니다.
prompt# ./engine www.hani.co.kr > result
prompt# vi result
그냥 이렇게 확인해 봤습니다.. ^^;;
리다이렉션 말고..
root#]script result
root#]./engine www.hani.co.kr
---------------------
프로그램 수행후
root#]exit
root#]vi result
스크립트 명령어는 화면에 출력되는 모든 문자열을 파일로 저장하는 함수입니다. 참고로 수행할때마다 파일이 새로
생성되는게 아니므로 기존 파일을 지우고 새로 수행하세요
되네요...^^
감사합니다.^^
리다이렉션은 왜 안 되는지 모르겠지만...
가르켜 주신대로 하니 정상적으로 작동을 하네요..^^
제 생각으로는
리다이렉션을 하면 임시버퍼 저장했다가 파일로 저장하기 때문이라고 생각됩니다.
즉 ls > test.txt를 하면 커널에서 ls의 결과를 임시버퍼에 저장한 후에 test.txt 파일을 생성하는 것 같네요.
따라서 리다이렉션으로 저장이 안된건 버퍼의 용량의 한계를 넘어서기 때문이라고 밖에 추측되네요.
감사합니다..^^
^^
댓글 달기