_fsopen, _wfsopen
파일 공유와 함께 스트림을 엽니다.
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
매개 변수
filename
열 파일의 이름입니다.mode
허용 되는 액세스 유형shflag
허용된 공유의 유형입니다.
반환 값
각 함수는 스트림에 대한 포인터를 반환합니다. null 포인터 값은 오류를 나타냅니다. filename 또는 mode가 NULL 또는 빈 문자열인 경우 이러한 함수는 매개 변수 유효성 검사에 설명된 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우, 이러한 함수는 NULL를 반환하고 errno를 EINVAL로 설정합니다.
이러한 반환 코드 및 기타 오류 코드에 대한 자세한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr을 참조하십시오.
설명
_fsopen 함수는 파일을 filename에 지정된 파일을 스트림으로 열고 모드 및 shflag 인수에 정의된 대로 파일의 다음 공유 읽기 또는 쓰기를 준비합니다. _wfsopen는 _fsopen의 와이드 문자 버전이며, _wfsopen에 대한 filename 및 mode 인수는 와이드 문자 문자열입니다. _wfsopen 및 _fsopen 는 동일하게 작동합니다.
mode 문자열은 아래의 표와 같이 파일에 대해 요청되는 액세스 형식을 지정합니다.
용어 |
정의 |
---|---|
"r" |
읽기 위해 엽니다. 파일이 없거나 찾을 수 없는 경우 _fsopen 호출이 실패합니다. |
"w" |
쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다. |
"a" |
파일의 끝에 쓰기 위해 엽니다(추가). 파일이 존재하지 않는 경우 파일을 먼저 만듭니다. |
"r+" |
읽고 쓰기 위해 엽니다. (파일이 존재 해야 합니다.) |
"w+" |
읽고 쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다. |
"a+" |
읽기 및 추가로 엽니다. 파일이 존재하지 않는 경우 파일을 먼저 만듭니다. |
이 "w" 와 "w+" 형식은 기존 파일을 삭제할 수도 있으므로 신중하게 사용합니다.
"a" 또는 "a+" 액세스 형식을 사용하여 파일을 연 경우 모든 쓰기 작업은 파일의 끝에서 수행됩니다. fseek 또는 rewind를 사용하여 파일 포인터의 위치를 변경할 수 있지만, 파일 포인터는 쓰기 작업을 수행하기 전에 항상 파일 끝으로 다시 이동합니다. 따라서 기존 데이터를 덮어쓸 수 없습니다. "r+", "w+" 또는 "a+" 액세스 형식을 지정한 경우 읽기와 쓰기가 모두 허용됩니다. 즉, 파일이 업데이트용으로 열립니다. 그러나 읽기 및 쓰기를 전환할 때 반드시 fsetpos, fseek, 또는 rewind 작업 사이에 있어야 합니다. 원하는 경우, fsetpos 또는 fseek 작업에 대해 현재 위지를 지정할 수 있습니다. 위의 값 이외에도 아래의 문자중 하나가 새 줄에 대한 변환 모드를 지정하기 위해서 및 파일 관리를 위해서 mode에 포함할 수 있습니다.
용어 |
정의 |
---|---|
t |
텍스트(변환됨) 모드에서 파일을 엽니다. 이 모드에서 캐리지 리턴/줄 바꿈 (CR-LF) 조합은 입력에서 한 줄 바꿈(LF)으로 변환되고, 줄 바꿈 문자는 출력에서 캐리지 리턴/줄 바꿈 조합으로 변환됩니다. 또한, CTRL + Z는 입력에서 파일 끝 문자로 해석 됩니다. 읽기/쓰기를 위해 연 파일에서 _fsopen은 파일 끝에서 Ctrl+Z를 확인하여 제거합니다(가능한 경우). fseek 및 ftell을 사용하여 Ctrl+Z로 끝나는 파일 내에서 이동하면 파일의 끝 부분에서 fseek가 제대로 동작하지 않을 수 있으므로 이 작업을 수행합니다. |
b |
(변환 되지 않은) 이진 모드에서 파일을 엽니다. 위의 변환은 표시되지 않습니다. |
S |
캐싱이 디스크에서 순차적 액세스를 위해 최적화되며 이에 제한되지 않습니다. |
R |
캐싱이 디스크에서 임의 액세스를 위해 최적화되며 이에 제한되지 않습니다. |
T |
파일을 임시 파일로 지정합니다. 가능하면 디스크에 플러시되지 않습니다. |
D |
파일을 임시 파일로 지정합니다. 마지막 파일 포인터를 닫을 때 삭제됩니다. |
t 또는 b가 mode에 지정되지 않은 경우, 변환 모드는 기본 모드 변수 _fmode로 정의됩니다. t 또는 b가 인수에 접두어로 추가되면 이 함수는 실행되지 못하고 NULL을 반환합니다. 텍스트 및 이진 모드의 논의는 텍스트 및 이진 모드 파일 I/O 를 참조하십시오.
인수 shflag 는 Share.h에 정의 된 매니페스트 상수 중 하나로 구성 된 상수 식입니다.
용어 |
정의 |
---|---|
_SH_COMPAT |
16 비트 응용 프로그램을 위한 호환 모드를 설정합니다. |
_SH_DENYNO |
읽기 및 쓰기 액세스 권한 |
_SH_DENYRD |
파일에 대한 읽기 액세스를 거부합니다. |
_SH_DENYRW |
파일에 대한 읽기 및 쓰기 액세스를 거부합니다. |
_SH_DENYWR |
파일에 대한 쓰기 액세스를 거부합니다. |
제네릭 텍스트 라우팅 매핑
Tchar.h 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
_MBCS 정의됨 |
_UNICODE 정의됨 |
---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
요구 사항
Function |
필수 헤더 |
선택적 헤더 |
---|---|---|
_fsopen |
<stdio.h> |
<share.h> shflag 매개 변수에 대한 매니페스트 상수입니다. |
_wfsopen |
<stdio.h> 또는 <wchar.h> |
<share.h> shflag 매개 변수에 대한 매니페스트 상수입니다. |
예제
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}