조 병 규 Software Quality Lab. 한국교통대학교 문제해결기법 16 _fsopen() 함수 조 병 규 Software Quality Lab. 한국교통대학교 SQ Lab.
fsopen() 함수 FILE *_fsopen(const char *Pfilename, const char *mode, int shflag); ■리턴값 ∙ 성공 : 해당 파일 포인터 ∙ 실패 : NULL ■파라미터 설명 ∙ Pfilename : 물리파일 이름 ∙ mode : 처리 유형 (fopen() 함수와 같다) ∙ shflag : 파일의 공유 여부를 설정 “share.h”에 정의되어 있다. fopen() 함수와 같으나 세 번째 파라미터에서 다른 프로그램과의 파일 공유 유무를 설정하는 것이 추가된 함수이다. SQ Lab.
처리 유형 mode 용 도 r 입력만 처리(파일이 존재하지 않으면 실패) w 출력만 처리 (파일이 이미 존재하면 전의 자료는 모두 없어짐) a 자료 추가(append) r+ 입/출력 처리(파일이 반드시 존재해야 함) w+ 입/출력 처리 a+ 입력/추가 처리(read and append) t 텍스트모드 설정(text mode) b 이진 모드 설정(binary mode) SQ Lab.
공유 모드 shflag 설 명 SH_DENYRW 입/출력을 공유하지 않는다. SH_DENYWR 출력을 공유하지 않는다. SH_DENYRD 입력을 공유하지 않는다. SH_DENYNO 입출력을 공유한다. 다른 프로그램과 파일을 같이 사용할 것인지에 대한 공유 여부를 설정하며, “share.h”에 정의되어 있다. 참고 : fopen() 함수는 다른 프로그램과 파일의 입/출력을 공유한다. SQ Lab.
예제 : SH_DENYxx /*001*/ /* fsopen01SH_DENYxx01 */ /*002*/ /*003*/ #include "stdio.h" /*004*/ #include "stdlib.h" /*005*/ #include "string.h" /*006*/ #include "share.h" /* SH_DENYRW */ /*007*/ /*008*/ #pragma warning(push, 2) /*009*/ SQ Lab.
/*013*/ file01 = _fsopen("c:\\files\\SH_DENYxx01.txt", "r", /*010*/ void main() /*011*/ { /*012*/ FILE *file01; /*013*/ file01 = _fsopen("c:\\files\\SH_DENYxx01.txt", "r", /*014*/ SH_DENYRW); /*015*/ if(file01 == NULL) /*016*/ { /*017*/ printf("\n open() error : (%i)%s", errno, strerror(errno)); /*018*/ getchar(); /*019*/ exit(0); /*020*/ } /*021*/ [참고] /*014*/ SH_DENYRD); /*014*/ SH_DENYWR); /*014*/ SH_DENYNO); SQ Lab.
/*027*/ fread(buffer, 45, 1, file01); /*028*/ buffer[44] = '\0'; /*022*/ puts(""); /*023*/ char buffer[45]; /*024*/ /*025*/ do /*026*/ { /*027*/ fread(buffer, 45, 1, file01); /*028*/ buffer[44] = '\0'; /*029*/ printf("%s", buffer); /*030*/ }while(!feof(file01)); /*031*/ /*032*/ fclose(file01); /*033*/ /*034*/ printf("\n\n 끝났습니다(^@^), <Enter>하십시요. "); /*035*/ getchar(); /*036*/ } SQ Lab.