블로그 이미지
frostguy

카테고리

분류 전체보기 (48)
사진 (3)
Study (40)
IT (3)
Total141,177
Today0
Yesterday25
VS 2005 로 넘어오면서 일반적인 문자열 함수가 아닌 _s 가 붙은 함수의 사용을 권장하게 되었으며

이를 사용하지 않을경우 warning 이 발생한다. 

strcpy -> strcpy_s
fopen -> fopen_s 
처럼 _s 를 붙이게 되는데, fopen 을 fopen_s 로 그냥 변환하게 되면 큰 문제가 발생한다.

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

아래 fopen_s 의 msdn 을 참고하면
http://msdn.microsoft.com/ko-kr/library/z5hh6ee9(VS.80).aspx

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 을 사용하면된다

if ( (fp=fopen(strPath, "wb")) == NULL) {AfxMessageBox("Cannot Open File");} // 정상 동작 
errno = fopen_s(&fp, strPath, "wb") 
if (errno != 0) {AfxMessageBox("Cannot Open File");} // 오류...
if ( (fp=_fsopen(strPath, "wb", _SH_DENYNO)) == NULL) {
         AfxMessageBox("Cannot Open File");
} // 이와 같이 변경...
Posted by frostguy

최근에 달린 댓글

글 보관함