2014-05-20 4 views
1

C 언어를 사용하여 쓰기 모드로 텍스트 파일을 열어 보겠습니다. 이제 텍스트 데이터를 추가합니다.파일 입출력 스트림 in c

1. 데이터는 어떻게 파일에 저장됩니까? 각 문자는 8 비트 ASCII 코드로 저장되어 있습니까?

우리는 파일 쓰기가 끝나면 EOF를 추가하지 않으며 fclose()를 사용하여 파일을 닫습니다.

2. 어떻게 EOF가 파일에 추가됩니까? 어떻게 파일에 저장됩니까?

getchar()을 사용하여 해당 파일의 문자로 문자를 읽을 때 EOF를 감지 할 수 있습니다. 이제 EOF는 ctrl + z이면 2 문자입니다^z 파일 끝에 저장됩니다. 따라서 getchar()은 ^와 z를 얻을 것입니다. 그래서

3. getchar()은 EOF를 어떻게 감지합니까? 일반적 라틴 C-1 또는 다른 단일 바이트 인코딩을 사용한다

+0

예, 문자는 8 비트 BYTES로 개별적으로 저장됩니다. ASCII를 쓰면 ASCII가됩니다. 만약 당신이 바이트'0x02'를 쓰면 당신은 바이트'0x02'를 얻는다. EOF는 파일 읽기 기능이 파일 끝에 있다는 것을 알 때 제공되는 리턴입니다. 실제로 파일 안에있는 것이 아닙니다. 함수는 파일 시스템이 파일의 길이에 대한 정보를 제공하고 파일 I/O 함수가 파일의 위치를 ​​추적하기 때문에 파일 시스템이 끝났음을 알 수 있습니다. – lurker

답변

1

EOF 파일에 저장됩니다 문자 아니다 참조하십시오, 당신이 파일을 읽을 때 당신이하는 특수 리턴 코드입니다. 파일 I/O 시스템은 파일의 정확한 길이를 저장하기 때문에 파일에 몇 개의 문자가 있는지 알고 있습니다. 프로그램이 마지막 사용 가능한 문자 다음에 문자를 읽으려고하면 파일 입출력 시스템이 의 범위를 벗어나는 을 반환합니다 (이 이유 때문에 getchar()과 같은 문자 읽기 루틴은 int이됩니다). char).

Ctrl 키 Z +

순서는 어느 쪽 EOF 문자 아니다. 이것은 쉘이 프로그램과 관련된 콘솔 입력 스트림을 닫도록 지시하는 특수한 키 시퀀스입니다. 스트림이 닫히면 다음 읽기는 프로그램에 EOF을 반환합니다. 같은 방법으로 Ctrl 키 + 는 C 명령 줄을 알려주는 순서입니다 - Ctrl 키 + 는 Z는 명령 행 처리기에 의해 해석되는 키보드 순서가 단지이다, 그러나 이해하는 것이 중요하다 프로세서를 사용하여 프로그램을 종료하십시오.

마지막으로, ^Z는 키보드 순서 허용 된 것을 시각적으로 확인하기 위해 명령 행 처리기에 의해 생성 된 Ctrl 키 + Z 시퀀스의 화면 표시의, 파일에 저장받을 두 문자가 아닙니다.

+0

Microsoft DOS _did_ 명시 적 EOF 코드 (x1B, IIRC)를 적어도 일부 언어 및 일부 편집자에게 파일로 저장하십시오. –

+0

@phil getchar()은 어떻게 그 EOF 코드를 읽을 수 있습니까? –

+0

@BreakingBenjamin 다른 문자 코드를 읽는 것과 같은 의미로 "읽는"것이 아닙니다. 'EOF'를 프로그램에 되 돌리려면 특별한 처리가 필요합니다. I/O 라이브러리는 파일 또는 콘솔 스트림을보고 현재 읽기 포인터가 끝에 있는지 확인합니다. 맞으면 'EOF'가 반환됩니다. 그렇지 않으면 파일/스트림의 다음 문자가 프로그램에 리턴됩니다. – dasblinkenlight

1
  1. 는하지만, UTF-8 로케일 설정을 사용하는 것이 가능해야한다. 대부분의 C 문자/문자열 처리 루틴에서는 이 UTF-8 또는 다른 멀티 바이트 인코딩을 제대로 처리하지 않으므로 특수 라이브러리를 사용해야합니다.

    의 끝을 표시하는 문자 (Unixy 시스템에서 Windows의 CR-LF, \ n) 그것은 사용하는 운영 체제에 따라 다르지만 대부분은 단순히 라인 끝으로, 에게 문자의 연속 스트림을 저장합니다 line (명시 적으로 입력해야 함)

  2. MS-DOS와 같은 일부 운영 체제에서는 명시 적으로 EOF 문자를 파일 끝에 쓸 수 있지만 대부분은 그렇지 않습니다. 단순히 파일 끝에서 을 실행하고 EOF 상태를보고합니다.

  3. 2.