2011-03-28 4 views
4

의 끝 부분에 null 문자가 없다는 것이 정상입니까, 파일 끝에는 null 문자가 없다는 것이 정상입니까?, 리눅스의 파일

빈 파일을 만들고 마우스 패드로 파일을 엽니 다.

저장하십시오.

16 진수 편집기로 파일을 열면 null 문자가 없지만 0a가 있습니다.

null 문자는 파일 끝에 넣어야합니까?

시스템 호출로 파일을 쓸 때.

은 0a입니까? 또는 0?

감사합니다.

답변

5

파일 시스템은 파일의 바이트 수를 기록하며 모든 바이트는 임의의 값을 가질 수 있습니다. 특정 문자/바이트 값은 파일 끝을 의미하는 예약 된 센티널 값이 아닙니다. 따라서 파일의 어느 곳에서나 NUL을 가질 수 있지만 끝 부분을 표시 할 필요가 없습니다.

텍스트 파일의 각 줄은 실제로 줄 바꿈, ASCII 10 dec, 0A hex로 끝나야합니다 (Windows에서는 캐리지 리턴 ASCII 13 dec 및 줄 바꿈이 사용됩니다). 빈 파일 ala echo > filename을 만들면 한 줄 넘김이 있지만 기본적으로 에코는 빈 줄을 인쇄하기 때문에. touch filename을 대신 사용하면 완전히 비어있게됩니다.

cat > filename을 터미널/콘솔 창에 입력하면 Control-D를 사용하여 파일 끝 (Windows에서는 Linux/Control-Z)을 트리거하지만 그 문자는에 저장되지 않습니다. 파일 자체.

+0

감사합니다. 파일에서 바이트 수를 얻는 방법을 알려주시겠습니까? 파일 시스템별로 기록 된 값 (파일 크기)에 액세스하는 방법은 무엇입니까? –

+0

@kim : 아마도 가장 좋은 이식 방법은 파일의 끝 부분을 fseek() 한 다음 파일 위치를 ftell()하는 것입니다. –

+1

@Kim, @Zan :'fseek'는 확실히 합리적인 방법입니다. 'stat'와'fstat'도 매우 편리 할 수 ​​있으며 생성/수정/접근 타임 스탬프와 소유권 정보와 같은 멋진 정보를 제공합니다. 한가지 다른 유용한 점은 파일의 끝을 읽는 것이 안전하다는 것입니다. fread와 read 함수는 일반적으로 읽은 바이트 수를 알려줍니다 : 요청한 것보다 적은 수 (0 포함)는 끝을 나타냅니다. 파일의. 'fgets'는 하나의 개행 문자로 구분 된 텍스트 라인을 읽거나, 파일 끝을 제외하고는 아무것도 읽을 수 없을 때 NULL을 반환합니다. –

-1

누가 파일 형식을 구현했는지에 따라 다릅니다.

7

일반적으로 Unix에서는 파일 끝에 null 문자가 없습니다. 빈 텍스트 파일에는 0 바이트가 있습니다. 하나의 빈 줄은 0x0A (LF, 라인 피드) 문자를 갖습니다. Unix 텍스트 파일에는 단일 LF 행 끝이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그렇다면 파일 끝에 도달했는지 어떻게 알 수 있습니까? 적어도 하나의 라인이 있다면 텍스트 파일에 LF 라인이 있지만 바이너리 파일은 무엇입니까? –

+0

@kimtaeyun ['read (2)'] (http://man7.org/linux/man-pages/man2/read.2.html)는 이미 파일의 끝에있을 때 0을 반환합니다. 그래서'while (bytes = read (fd, buf, bufsize)) {buf [0..bytes-1]}로 무엇인가를 수행하라 '는 EOF 때까지 bufsize 청크에서 파일을 읽는 일반적인 관용구이다. –

2

0a는 줄 바꿈, 일명 control-J 또는 \n입니다. 텍스트 파일은 일반적으로 유닉스에서 널 문자로 끝나지 않는다.

관련 문제