다음을 통해 공유


_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 포인터 값은 오류를 나타냅니다. mode 이러한 filename 함수는 NULL 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우, 이러한 함수는 NULL를 반환하고 errnoEINVAL로 설정합니다.

이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno_sys_nerr_sys_errlist를 참조하세요.errno

설명

_fsopen 함수는 filename에서 스트림으로 지정된 파일을 열고 모드 및 shflag 인수에 정의된 대로 후속 공유 읽기 또는 쓰기를 위해 파일을 준비합니다. _wfsopen은 와이드 문자 버전의 _fsopen이며, _wfsopen에 대한 filenamemode 인수는 와이드 문자열입니다. 그렇지 않으면_wfsopen_fsopen 이 동일하게 작동합니다.

문자열 mode는 다음 표에 나온 것과 같이 파일에 대해 요청된 액세스 형식을 지정합니다.

용어 정의
"r" 읽기 위해 엽니다. 파일이 없거나 찾을 수 없는 경우 호출이 _fsopen 실패합니다.
"w" 쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.
"a" 파일의 끝에 쓰기용으로 열립니다(추가). 는 파일이 없는 경우 먼저 파일을 만듭니다.
"r+" 읽고 쓰기 위해 엽니다. 파일이 있어야 합니다.
"w+" 읽고 쓰기 위해 빈 파일을 엽니다. 지정한 파일이 있으면 이 파일의 내용은 삭제됩니다.
"a+" 읽기 및 추가를 위해 열립니다. 는 파일이 없는 경우 먼저 파일을 만듭니다.

기존 파일을 삭제할 수 있으므로 "w""w+" 형식을 주의하여 사용합니다.

"" 또는 "aa+" 액세스 형식으로 파일을 열면 모든 쓰기 작업이 파일의 끝에 발생합니다. 파일 포인터는 사용 fseek 하거나 rewind위치를 변경할 수 있지만 쓰기 작업이 수행되기 전에 항상 파일의 끝으로 다시 이동합니다. 따라서 기존 데이터를 덮어쓸 수 없습니다. "r+", "w+" 또는 "a+" 액세스 형식을 지정하면 읽기 및 쓰기가 모두 허용됩니다(파일을 업데이트하기 위해 열려 있다고 함). 그러나 읽기와 쓰기 사이를 전환할 때 중간 fsetposfseekrewind 또는 연산이 있어야 합니다. 원하는 경우 fsetpos 또는 fseek 작업에 대한 현재 위치를 지정할 수 있습니다. 위의 값 외에도, 다음 문자 중 하나를 mode에 포함하여 새 줄 및 파일 관리에 대해 변환 모드를 지정할 수 있습니다.

용어 정의
t 파일을 텍스트(변환됨) 모드에서 엽니다. 이 모드에서는 CR-LF(캐리지 리턴 라인 피드) 조합이 입력에서 LF(단일 줄 바꿈)로 변환되고 LF 문자는 출력에서 CR-LF 조합으로 변환됩니다. 또한 CTRL+Z는 입력 시 파일 끝 문자로 변환됩니다. 읽기용으로나 읽기/쓰기용으로 열려 있는 파일에서 _fsopen는 파일 끝에 CTRL+Z가 있는지 확인하고 가능한 경우 이를 제거합니다. Ctrl+Z로 끝나는 파일 내에서 사용 fseekftell 이동하면 파일 끝부분에 부적절하게 동작할 수 fseek 있으므로 제거됩니다.
b 이진(변환되지 않은) 모드에서 파일을 엽니다. 위에서 설명한 변환은 표시되지 않습니다.
D 마지막 파일 포인터를 닫을 때 삭제되는 임시 파일을 지정합니다.
R 캐싱이 디스크에서 임의 액세스를 위해 최적화되며 이에 제한되지 않습니다.
S 캐싱이 디스크에서 순차적 액세스를 위해 최적화되며 이에 제한되지 않습니다.
T 메모리 압력이 필요하지 않은 한 디스크에 기록되지 않은 파일을 지정합니다.

지정되거나 b 지정mode되지 않은 경우 t 변환 모드는 기본 모드 변수_fmode에 의해 정의됩니다. t 또는 b 가 인수에 접두어로 추가되면 이 함수는 실행되지 못하고 NULL을 반환합니다. 텍스트 및 이진 모드에 대한 자세한 내용은 텍스트 및 이진 모드 파일 I/O를 참조 하세요.

관련 사항 TD:

  • T 메모리 압력이 필요하지 않은 한 디스크에 파일을 쓰지 않습니다. 자세한 내용은 파일 특성 상수 및 이 블로그 게시물에서 임시로만 참조 FILE_ATTRIBUTE_TEMPORARY 하세요.
  • D 는 디스크에 기록되는 일반 파일을 지정합니다. 차이점은 닫히면 자동으로 삭제된다는 것입니다. 결합 TD 하여 두 의미 체계를 모두 가져올 수 있습니다.

_fsopen_wfsopen Microsoft 관련 변형입니다 fopen. ANSI 표준에 속하지 않습니다. 더 이식 가능하고 안전한 함수의 경우 파일 공유가 필요하지 않은 경우 고려 _wfopen_s 하거나 fopen_s.

인수 shflag 는 에 정의된 다음 매니페스트 상수 중 하나로 구성된 상수 식입니다 Share.h.

용어 정의
_SH_DENYNO 읽기 및 쓰기 액세스 권한을 허용합니다.
_SH_DENYRD 파일에 대한 읽기 권한을 거부합니다.
_SH_DENYRW 파일에 대한 읽기 및 쓰기 권한을 거부합니다.
_SH_DENYWR 파일에 대한 쓰기 권한을 거부합니다.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.

일반 텍스트 루틴 매핑

Tchar.h 루틴 _UNICODE_MBCS 정의되지 않음 정의된 _MBCS 정의된 _UNICODE
_tfsopen _fsopen _fsopen _wfsopen

요구 사항

함수 필수 헤더 선택적 헤더
_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" );
}
No one else in the network can write to this file until we are done.

참고 항목

스트림 I/O
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen