_fsopen, _wfsopen_fsopen, _wfsopen

파일 공유를 사용한 스트림을 엽니다.Opens a stream with file sharing.

구문Syntax

FILE *_fsopen(
   const char *filename,
   const char *mode,
   int shflag
);
FILE *_wfsopen(
   const wchar_t *filename,
   const wchar_t *mode,
   int shflag
);

매개 변수Parameters

이름도filename
열 파일의 이름입니다.Name of the file to open.

modemode
허용되는 액세스 형식입니다.Type of access permitted.

shflagshflag
허용되는 공유 유형입니다.Type of sharing allowed.

Return ValueReturn Value

각 함수는 스트림에 대한 포인터를 반환합니다.Each of these functions returns a pointer to the stream. null 포인터 값은 오류를 나타냅니다.A null pointer value indicates an error. 파일 이름 또는 모드가 NULL 이거나 빈 문자열인 경우 이러한 함수는 매개 변수 유효성 검사에 설명 된 대로 잘못 된 매개 변수 처리기를 호출 합니다.If filename or mode is NULL or an empty string, these functions invoke the invalid parameter handler, as described in Parameter Validation. 계속 해 서 실행 하도록 허용한 경우 이러한 함수는 NULL 을 반환 하 고 errnoEINVAL로 설정 합니다.If execution is allowed to continue, these functions return NULL and set errno to EINVAL.

이 오류 및 다른 오류 코드에 대한 자세한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr를 참조하세요.For more information about these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

설명Remarks

_Fsopen 함수는 파일 이름 으로 지정 된 파일을 스트림으로 열고 모드 및 shflag 인수에 정의 된 대로 후속 공유 읽기 또는 쓰기를 위해 파일을 준비 합니다.The _fsopen function opens the file specified by filename as a stream and prepares the file for subsequent shared reading or writing, as defined by the mode and shflag arguments. _wfsopen_fsopen의 와이드 문자 버전입니다. _wfsopen 에 대 한 파일 이름모드 인수는 와이드 문자 문자열입니다._wfsopen is a wide-character version of _fsopen; the filename and mode arguments to _wfsopen are wide-character strings. _wfsopen_fsopen 는 동일 하 게 동작 합니다._wfsopen and _fsopen behave identically otherwise.

문자열 모드 는 다음 표에 나와 있는 것 처럼 파일에 대해 요청 된 액세스 형식을 지정 합니다.The character string mode specifies the type of access requested for the file, as shown in the following table.

용어Term 정의Definition
&"r" 읽기 위해 엽니다.Opens for reading. 파일이 없거나 찾을 수 없는 경우 _fsopen 호출이 실패 합니다.If the file does not exist or cannot be found, the _fsopen call fails.
w"w" 쓰기 위해 빈 파일을 엽니다.Opens an empty file for writing. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.If the given file exists, its contents are destroyed.
"a" 파일 끝에 쓰기(추가) 위해 엽니다. 파일이 존재하지 않는 경우 먼저 파일을 만듭니다.Opens for writing at the end of the file (appending); creates the file first if it does not exist.
"r +""r+" 읽고 쓰기 위해 엽니다.Opens for both reading and writing. 파일이 있어야 합니다.(The file must exist.)
"w +""w+" 읽고 쓰기 위해 빈 파일을 엽니다.Opens an empty file for both reading and writing. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.If the given file exists, its contents are destroyed.
"a +""a+" 읽기 및 추가를 위해 엽니다. 파일이 존재하지 않는 경우 먼저 파일을 만듭니다.Opens for reading and appending; creates the file first if it does not exist.

기존 파일을 삭제할 수 있으므로 "w""w +" 형식을 주의 해 서 사용 해야 합니다.Use the "w" and "w+" types with care, as they can destroy existing files.

파일이 "a" 또는 "a +" 액세스 형식으로 열리면 모든 쓰기 작업이 파일 끝에서 발생 합니다.When a file is opened with the "a" or "a+" access type, all write operations occur at the end of the file. Fseek 또는 되감기를 사용 하 여 파일 포인터의 위치를 변경할 수 있지만 쓰기 작업을 수행 하기 전에 항상 파일 끝으로 다시 이동 합니다. 따라서 기존 데이터를 덮어쓸 수 없습니다.The file pointer can be repositioned using fseek or rewind, but it is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten. "R +", "w +" 또는 "a +" 액세스 형식을 지정 하는 경우 읽기와 쓰기가 모두 허용 됩니다. 파일이 업데이트를 위해 열려 있다고 합니다.When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for update). 그러나 읽기와 쓰기를 전환할 때는 먼저 fsetpos, fseek 또는 rewind 작업이 있어야 합니다.However, when switching between reading and writing, there must be an intervening fsetpos, fseek, or rewind operation. 원하는 경우 fsetpos 또는 fseek 작업에 대해 현재 위치를 지정할 수 있습니다.The current position can be specified for the fsetpos or fseek operation, if desired. 위의 값 외에도, 다음 문자 중 하나를 모드 에 포함 하 여 새 줄에 대 한 변환 모드를 지정 하 고 파일을 관리할 수 있습니다.In addition to the above values, one of the following characters can be included in mode to specify the translation mode for new lines, and for file management.

용어Term 정의Definition
t 파일을 텍스트(변환됨) 모드에서 엽니다.Opens a file in text (translated) mode. 이 모드에서 CR (캐리지 리턴-줄 바꿈) 조합은 입력 시 LF (단일 줄 바꿈)로 변환 되 고 LF 문자는 출력에서 CR-LF 조합으로 변환 됩니다.In this mode, carriage return-line feed (CR-LF) combinations are translated into single line feeds (LF) on input and LF characters are translated to CR-LF combinations on output. 또한 CTRL+Z는 입력 시 파일 끝 문자로 변환됩니다.Also, CTRL+Z is interpreted as an end-of-file character on input. 읽기 또는 읽기/쓰기용 _fsopen 으로 열려 있는 파일에서는 파일 끝에 CTRL + Z가 있는지 확인 하 고 가능한 경우이를 제거 합니다.In files opened for reading or reading/writing, _fsopen checks for a CTRL+Z at the end of the file and removes it, if possible. 이 작업은 fseekfseek 를 사용 하 여 CTRL + Z로 끝나는 파일 내에서 이동 하면 파일의 끝 부분에서 fseek 가 제대로 동작 하지 않을 수 있기 때문입니다.This is done because using fseek and ftell to move within a file that ends with a CTRL+Z might cause fseek to behave improperly near the end of the file.
bb 이진(변환되지 않은) 모드에서 파일을 엽니다. 위에서 설명한 변환은 표시되지 않습니다.Opens a file in binary (untranslated) mode; the above translations are suppressed.
SS 캐싱이 디스크에서 순차적 액세스를 위해 최적화되며 이에 제한되지 않습니다.Specifies that caching is optimized for, but not restricted to, sequential access from disk.
RR 캐싱이 디스크에서 임의 액세스를 위해 최적화되며 이에 제한되지 않습니다.Specifies that caching is optimized for, but not restricted to, random access from disk.
TT 파일을 임시 파일로 지정합니다.Specifies a file as temporary. 가능하면 디스크에 플러시되지 않습니다.If possible, it is not flushed to disk.
DD 파일을 임시 파일로 지정합니다.Specifies a file as temporary. 마지막 파일 포인터를 닫을 때 삭제됩니다.It is deleted when the last file pointer is closed.

modet 또는 b가 지정되지 않은 경우 변환 모드는 기본 모드 변수 _fmode로 정의됩니다.If t or b is not given in mode, the translation mode is defined by the default-mode variable _fmode. T 또는 b 가 인수 앞에 있으면 함수가 실패 하 고 NULL을 반환 합니다.If t or b is prefixed to the argument, the function fails and returns NULL. 텍스트 모드와 이진 모드에 대한 자세한 내용은 텍스트 및 이진 모드 파일 I/O를 참조하세요.For a discussion of text and binary modes, see Text and Binary Mode File I/O.

Shflag 인수는 Share. h에 정의 된 다음 매니페스트 상수 중 하나로 구성 된 상수 식입니다.The argument shflag is a constant expression consisting of one of the following manifest constants, defined in Share.h.

용어Term 정의Definition
_SH_COMPAT_SH_COMPAT 16비트 애플리케이션에 대한 호환성 모드를 설정합니다.Sets Compatibility mode for 16-bit applications.
_SH_DENYNO_SH_DENYNO 읽기 및 쓰기 권한을 허용합니다.Permits read and write access.
_SH_DENYRD_SH_DENYRD 파일에 대한 읽기 권한을 거부합니다.Denies read access to the file.
_SH_DENYRW_SH_DENYRW 파일에 대한 읽기 및 쓰기 권한을 거부합니다.Denies read and write access to the file.
_SH_DENYWR_SH_DENYWR 파일에 대한 쓰기 권한을 거부합니다.Denies write access to the file.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

제네릭 텍스트 라우팅 매핑Generic-Text Routine Mappings

Tchar.h 루틴Tchar.h routine _UNICODE 및 _MBCS 정의되지 않음_UNICODE and _MBCS not defined _MBCS 정의됨_MBCS defined _UNICODE 정의됨_UNICODE defined
_tfsopen_tfsopen _fsopen_fsopen _fsopen_fsopen _wfsopen_wfsopen

요구 사항Requirements

기능Function 필수 헤더Required header 선택적 헤더Optional headers
_fsopen_fsopen <stdio.h><stdio.h> <share.h><share.h>

Shflag 매개 변수에 대 한 매니페스트 상수입니다.For manifest constant for shflag parameter.
_wfsopen_wfsopen <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h> <share.h><share.h>

Shflag 매개 변수에 대 한 매니페스트 상수입니다.For manifest constant for shflag parameter.

예제Example

// 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" );
}
No one else in the network can write to this file until we are done.

참조See also

스트림 I/OStream I/O
fclose, _fcloseallfclose, _fcloseall
_fdopen, _wfdopen_fdopen, _wfdopen
ferrorferror
_fileno_fileno
fopen, _wfopenfopen, _wfopen
freopen, _wfreopenfreopen, _wfreopen
_open, _wopen_open, _wopen
_setmode_setmode
_sopen, _wsopen_sopen, _wsopen