EOF가 작동하는 방식을 이해할 수 없으며 내 PC가 파일 크기를 어떻게 알 수 있습니까?리눅스에서 다른 크기의 파일이있는 동일한 파일
예를 들어 test0, test1 및 test2의 3 개 파일을 만들었습니다.
abcd
를 공백이나 새 줄이 없으면 : - : 내가 이런 식으로 test0와 TEST1을 만들었> 새 문서 및 파일 내부에 내가 쓴
int main(void) {
/* */
FILE* fp0 = fopen("/home/kevin/eclipse-workspaceC/FileMangment/src/test0", "w+");
FILE* fp1 = fopen("/home/kevin/eclipse-workspaceC/FileMangment/src/test1", "w+");
if (!fp0 || !fp1) {
fprintf(stderr, "file pointer points to NULL\n");
return 1;
}
fprintf(fp0, "abcd");
fprintf(fp1, "abcd\n");
fclose(fp0);
fclose(fp1);
return 0;
}
가 그럼 난과 TEST2를 생성, 마우스 오른쪽 버튼을 클릭 결국.
wc -c test*; file test*
출력 :
4 test0
5 test1
5 test2
14 total
test0: ASCII text, with no line terminators
test1: ASCII text
test2: ASCII text
나는 그들이 동일한 것 gedit를 사용하여 파일을 보러
가 (새로운 라인 설립) 그런 다음 배쉬에 나는 명령을 실행했습니다.나는 \n
이 개행 문자이고 EOF가 아니라는 것을 알고있다. (그리고 나는이 EOF가 무엇인지 이해할 수 없다.) 그래서 내 컴퓨터가 파일을 끝낼 때를 어떻게 알 수 있을까? 디스크 블록 크기가 4K 인 경우 올바른 바이트 수 후에 디스크 블록 크기가 멈추고 이후에 오는 내용을 계속 읽지 않는 이유는 무엇입니까?
이유는 이런 방식으로 파일을 구문 분석 코드의 톤 보는가 :
while((c=fgetc(infile))!=EOF){
putchar(c);
}
그래서이 어딘가에 (EOF)라는 문자가 있음을 의미를 ??????? 그러나 나는 그것을 ascii 테이블에서 찾을 수 없다. 그리고 그 가치가 -1이라는 것을 발견했습니다 .... 매우 매우 혼란 스럽습니다. ...
내 PC는 크기를 알고 있거나 크기가 어딘가요?
your file at position xyz has the size of blahblah...
을 따라서 WHERE이 곳은 다음과 같습니다
어딘가에 내 컴퓨터에가 있어야합니다? 또는 나는 무엇을 google해야 하는가? 내가 3Gozzilion 같은 것을봤을 때 : 내 파일 크기는 어디에 저장되어 있습니까? 그리고 아무것도 찾지 못했습니다. 나는이 정보가 어디에 저장되어 있는지 알고 싶다.
파일 시스템의 파일 정보에는 파일의 실제 크기 (사용중인 바이트)가 있습니다. I/O 라이브러리 및/또는 OS는이 파일을 사용하여 파일에서 읽을 수있는 내용을 제한합니다. –
'EOF'문자가 없습니다. 'fgetc'는'char'를 리턴하지 않습니다. 그것은 파일의 끝에서'int' 나'EOF'로 승격 된 문자를 반환합니다. – MFisherKDX
"그래서 내 컴퓨터가 파일이 끝나는 시점을 어떻게 알 수 있습니까?" 파일 길이, 생성/수정 시간, 파일 이름 등은 다른 곳에 저장됩니다. 이 메타 데이터는 종종 폴더/디렉토리에 저장됩니다. – chux