2017-09-14 12 views
0

예를 들어, FAT32 파티션에서 최대 파일 크기는 4GB입니다. 하지만 vim을 사용하여 5GB 파일을 만들 수 있었고 파일을 저장하고 다시 열었습니다. 콘솔 출력이 계단처럼 부서졌습니다. 세 가지 질문이 있습니다.파일 크기가 파일 시스템의 최대 크기를 초과하면 어떻게됩니까?

  1. 파일 크기가 파일 시스템의 최대 크기를 초과하면 어떻게됩니까?

  2. 내 경우에는 왜 깨지십니까?

  3. Unix 시스템 호출에서 stat()는 최대 2GB (2^31-1)까지 성공할 수 있습니다. 이것은 파일 시스템과 관련이 있습니까? stat()의 데이터 한계와 파일 시스템의 각 기능의 한계 사이에 관계가 있습니까? 파일의 크기가 파일 시스템의 최대 크기를 초과하는 경우

+1

'쓰기'는 다소 혼란스러운'ENOSPC' ("장치에 남아있는 공간 없음")로 실패합니다; 세 번째로 또는 그 오류로'cp'가 실패하고 USB 키를 비우지 않으면 장치에 남아있는 공간에 대해 생각하기 전에 복사중인 파일의 크기가 4GB를 초과하는지 확인하는 방법을 배웠습니다. . –

답변

1

, 무슨 일이?

정의에 따르면 이는 결코 일어날 수 없습니다. 실제로 어떤 시스템 호출 (아마도 write(2) ...)이 실패하고 코드가이를 처리해야합니다.

FAT32 파일 시스템은 파일의 최대 크기를 2 기가 바이트로 제한합니다. 더 많은 것을 원한다면 USB 키에 더 나은 file system을 사용하십시오 (또는 더 큰 청크에 큰 파일 split(1)을 FAT32 형식의 USB 키로 복사하기 전에).

(그들이 어떤 실패 write(2)을 할 것이기 때문에, 예를 들어) fflush(3)fprintf(3)fclose(3) (대부분의 다른 표준 기능) 실패 할 수 있다는 <stdio.h> 통지를 사용하는 경우. 당신의 pseudoterminal가 일부 깨진 상태에 있었기 때문에

콘솔 출력은 계단 아마

처럼 부서졌다. stty(1), reset(1), termios(3)을 읽고 tty demystified을 읽으십시오. 당신은 stat(2)을 오해하는

- 유닉스 시스템 호출에서

는, 합계()는 2GB의 (1 2^31)까지 성공할 수 있습니다. 해당 설명서를 다시 읽으십시오.

Advanced Linux Programming을 읽고 syscalls(2)을 읽으십시오.

나는 vim의 동작은 다음 (가, free software 자사의 소스 코드를 공부 먼저 문서를 읽어 이해하기 vim

으로 5GB 용량의 파일을 생성 할 수 있었다 당신은 공부해야 아마도 수와 암호).

을 사용하여 일부 명령이나 프로세스에서 수행 된 시스템 호출을 이해할 수도 있습니다.

+0

파일 시스템마다 다릅니다. FAT32는 파일 크기를 2Gb로 제한합니다. 더 나은 파일 시스템으로 USB 키 포맷하기 –

+0

대부분의 64 비트 리눅스 시스템에서 libc의'stat' 함수는'stat64'를 호출합니다 –

+2

'stat()'는 64 비트 시스템에서 64 비트 변수의 크기를 반환합니다 if 당신은 stat()에 64 비트 타입을 사용하지 않는 32 비트 시스템에있다. 보통 statistic()이 64 비트 변형을 투명하게 사용하도록'#define _FILE_OFFSET_BITS = 64'를 사용하여 컴파일 할 수있다. – nos