컨텐츠 바로가기

[C] fopen함수와 fopen_s의 차이

http://noname1911.egloos.com/1447510

1. _s 의 의미

   safety


2. 입력서식

   fopen 함수 :
   FILE * fp = fopen(const char * filename, const char * mode);

   fopen_s 함수 :
   FILE * fp = fopen_s(&fp, const char * filename, const char * mode);

   괄호 앞부분에 파일의 이름(또는 경로 포함한 이름.) 그리고 괄호 뒷부분에 입출력 모드를 써주면 된다.

   fopen_s 함수를 보면 fopen 함수의 괄호 앞부분에 파일포인터의 주소(&fp)를 추가한 것에 불과하다.



3.함수의 리턴값

   정상적으로 파일이 열리지 않았을때 오류메시지를 출력하려면 어떻게 해야할까?
   함수의 리턴값으로서 오류메시지를 출력할 수 있다.
   정상적으로 파일을 읽어오느냐 읽어오지 못하느냐에 따라 함수의 리턴값이 달라지기 때문이다.

   fopen 함수는 파일포인터를 통해 구분한다. 
   

   int main (void)

  {
      FILE * fp = fopen("data.txt", "wt")

      if (fp==NULL)
        {puts("파일 오픈 실패!" 
         return -1
         }

       ~파일 오픈해서 구동할 함수 넣기~

   }

   이런 식으로 사용한다.

   fopen_s 함수는 

   errno_t err; 와 같이 오류코드를 return 받는다.

   errno_t 는 VS에서 지원하는 다양한 함수의 반환값으로 사용된다.

   이 값이 0이면 성공을 의미하며, 0이 아닐 때는 오류가 발생하여 해당 함수가 실패했음을 의미한다.

   오류의 내용에 따라 다양한 값을 가지게 된다.


fopen_s에서 파일이 정상적으로 열리지 않았을 경우 프로그램이 종료되게 하려면 아래와 같이 소스를 짠다.


#include <stdio.h>

int main(void)
{
errno_t err;
FILE *fp; 

err = fopen_s(&fp, "data.txt", "wt");  // 전체 path 경로를 지정, 아니면 실행파일이 있는 곳에 생성됨 
if (err == 0) 
puts("파일오픈 성공!\n");
else  {
puts("파일 오픈 실패\n");
return -1;
}
fputc('A', fp);
fputc('B', fp);
fputs("My name is Hong \n", fp);
fputs("Your name is Yoon \n", fp);
fflush(stdout);
fclose(fp);
return 0;

}
   

덧글|덧글 쓰기|신고