연재 완료/C Lang 이론

C언어 이론 12. 파일처리 (고수준의 파일 입출력 1. 열고닫기)

라이피 (Lypi) 2018. 6. 16. 22:40
반응형

내용 출처 : YES C (정보공학연구소 /생능출판사)

               혼자 연구하는 C/C++ (SoEn.kr /와우북스)



Ⅰ. 파일 열고 닫기

   ① 파일에 데이터를 입출력하려면 제일 먼저 파일을 열어서 실행중인 프로그램과 파일간의 스트림을 연결해야한다.

   ② 파일을 열고 작업이 끝나면 파일을 닫아 스트림을 닫아주어야 작업이 파일에 저장된다. 

   ③ 고수준의 입출력에서는 이 스트림을 FP(파일포인터)로 관리한다. 

   ④ 고수준의 입출력에서 파일을 여는 함수는 fopen_s()이고 닫는 함수는 fclose()이다. 

   ⑤ fopen()의 경우 파일을 열고 FP값을 반환값으로 주기 때문에 이를 저장하지 않는 실수를 할 수도 있었지만, 

       fopen_s()의 경우 FP값을 첫번째 인자로 요구하기 때문에 그럴수가 없다.


Ⅱ. fopen_s()/fclose()

   ① 원형과 사용 예

//원형
errno_t    fopen_s   (FILE** _stream, char const* _FileName, char const* _mode);
int        fclose    (FILE* _Stream);
//사용 예
FILE* fp;
fopen_s(&f, "Test.txt", "rt");
fclose(f);

   ② fopen_s()의 리턴타입은 errno_t로 vs에서 에러정보를 표현하기 위해 사용하는 정수값이다. (참조 : errno_t타입)

   ③ fopen_s()는 첫번째 인자로 파일포인터의 주소값을 요구해서 파일구조체의 주소값을 파일포인터에 직접 넣어준다.

   ④ fopen_s()가 요구하는 두번째 인자는 스트림을 연결할 파일의 주소가 적힌 문자열이다. 

   ⑤ 주소는 절대 주소로 입력해도 되고, 상대 주소로 입력해도 된다.

   ⑥ fopen_s()가 요구하는 세번째 인자는 모드를 지정하는 문자열로, 파일을 열어서 어떤 작업을 할 것인가와 파일 형태 등을 의미한다.


모드

  설명

r


  읽기 전용으로 파일을 연다. 

  파일이 없을 경우 FP에 NULL을 저장한다.

w



  쓰기 전용으로 파일을 연다. 

  파일이 없을 경우 새로 만들고, 있으면 지우고 새로 만든다.

  도스나 윈도우즈에는 쓰기 전용 파일이 없지만, 스트림은 쓰기전용 상태로 열 수 있다.

a


  내용 추가를 위해 쓰기 전용으로 파일을 연다. 

  파일이 없을 경우 새로 만들고, 있으면 파일을 열어 FP를 가장 끝으로 보낸다.

r+

  읽고 쓰기가 가능하도록 파일을 연다. 파일이 없을 경우 FP에 NULL을 저장한다.

w+

  읽고 쓰기가 가능하도록 파일을 연다. 파일이 없을 경우 새로 만든다. 있으면 지우고 새로 만든다.

a+

  읽고 추가가 가능하도록 파일을 연다. 파일이 없을 경우 새로 만든다.


플래그

  파일 형태

생략

  전역변수 _fmode에 설정된 값. 기본 설정은 텍스트(text) 모드

t

  텍스트(text) 모드

b

  이진(binary) 모드


   ⑦ "rt", "wb", "a+b", "at+" 등으로 쓰면 된다. (더 상세한 모드 지정에 대한 내용은 MSDN(링크)을 참조.)

   ⑧ 이진 모드는 아무런 변환없이 내용을 읽지만, 텍스트 모드에서는 

       1) 읽을 때 CR/LF는 LF로, 쓸때는 반대로 변환한다.  

       2) 파일의 끝을 나타내는 Ctrl+Z(0x1A)는 EOF(-1)로 변환된다. 내용 추가일 때는 Ctrl+Z를 제거한다.

   ⑨ fclose()는 FP를 인자로 받아 버퍼에 남아있는 데이터를 파일로 완전히 출력(flush)하고 FILE 구조체를 해제한다.



반응형