본문 바로가기

컴퓨터 공학 자료(학부)/Error log

fopen과 fopen_s의 차이

VS2008에서 fopen함수를 쓰니 계속 unsafe 메시지를 띄우면서 warning을 띄우길래 찾아보니
VS 2005 로 넘어오면서 일반적인 문자열 함수가 아닌 _s 가 붙은 함수의 사용을 권장하게 되었으며
이를 사용하지 않을경우 warning 이 발생한다고 한다. 

strcpy -> strcpy_s  fopen -> fopen_s  fclose->fclose_s 등등등..
처럼 쓰는데, 무턱대로  fopen 을 fopen_s 로 바꾸면 또 문제가 발생하므로 알고 써야한다.

 fopen_s 의 msdn 주소
http://msdn.microsoft.com/ko-kr/library/z5hh6ee9(VS.80).aspx

msdn에 의하면
Files opened by fopen_s and _wfopen_s are not sharable. If you require that a file be sharable, use _fsopen, _wfsopen with the appropriate sharing mode constant (for example, _SH_DENYNO for read/write sharing).

fopen_s 는 파일을 공유할 수가 없다고 적혀있다.
파일을 공유하기 위해서는 _fsopen 을 사용하면된다


fopen_s에서는
똑같은 파일을 여러번 열고 닫을 경우에는  최초에 파일을 열때는 상관없지만, 2번째 파일 Open 시부터는 Permission Denied 라는 errno 를 반환하며 파일을 쓸 수가 없게 된다.