fopen, fopen_s
From cppreference.net
|
헤더 파일에 정의됨
<stdio.h>
|
||
| (1) | ||
|
FILE
*
fopen
(
const
char
*
filename,
const
char
*
mode
)
;
|
(C99까지) | |
|
FILE
*
fopen
(
const
char
*
restrict
filename,
const
char
*
restrict
mode
)
;
|
(C99부터) | |
|
errno_t fopen_s
(
FILE
*
restrict
*
restrict
streamptr,
const
char
*
restrict
filename,
|
(2) | (C11부터) |
1)
filename
이 나타내는 파일을 열고 해당 파일과 연관된 파일 스트림에 대한 포인터를 반환합니다.
mode
는 파일 접근 모드를 결정하는 데 사용됩니다.
2)
(1)
과 동일하지만, 파일 스트림에 대한 포인터가
streamptr
에 기록되고 런타임에 다음 오류들이 감지되어 현재 설치된
constraint handler
함수를 호출합니다:
-
-
streamptr이 null 포인터인 경우 -
filename이 null 포인터인 경우 -
mode이 null 포인터인 경우
-
fopen_s
는 구현에 의해
__STDC_LIB_EXT1__
가 정의되고 사용자가
<stdio.h>
를 포함하기 전에
__STDC_WANT_LIB_EXT1__
를 정수 상수
1
로 정의한 경우에만 사용 가능함이 보장됩니다.
목차 |
매개변수
| filename | - | 파일 스트림과 연결할 파일 이름 |
| mode | - | 널 종료 문자열로 파일 접근 모드 를 결정함 |
| streamptr | - | 함수가 결과를 저장할 포인터의 포인터 (출력 매개변수) |
파일 접근 플래그
|
파일 접근
모드 문자열 |
의미 | 설명 |
파일이 이미 존재할 때
동작 |
파일이 존재하지 않을 때
동작 |
|---|---|---|---|---|
| "r" | 읽기 | 파일을 읽기 위해 열기 | 시작부터 읽기 | 열기 실패 |
| "w" | 쓰기 | 파일을 쓰기 위해 생성 | 내용 파괴 | 새 파일 생성 |
| "a" | 추가 | 파일에 추가하기 | 끝에 쓰기 | 새 파일 생성 |
| "r+" | 확장 읽기 | 파일을 읽기/쓰기 위해 열기 | 시작부터 읽기 | 오류 |
| "w+" | 확장 쓰기 | 파일을 읽기/쓰기 위해 생성 | 내용 파괴 | 새 파일 생성 |
| "a+" | 확장 추가 | 파일을 읽기/쓰기 위해 열기 | 끝에 쓰기 | 새 파일 생성 |
|
파일 접근 모드 플래그
"b"
를 선택적으로 지정하여 파일을 바이너리 모드로 열 수 있습니다. 이 플래그는 POSIX 시스템에서는 영향을 미치지 않지만, Windows에서는
'
\n
'
와
'
\x1A
'
의 특별한 처리를 비활성화합니다.
추가 파일 접근 모드에서는 파일 위치 표시자의 현재 위치와 관계없이 데이터가 파일의 끝에 기록됩니다. |
||||
| 모드가 위에 나열된 문자열 중 하나가 아닌 경우 동작은 정의되지 않습니다. 일부 구현에서는 추가로 지원되는 모드를 정의합니다 (예: Windows ). | ||||
| 갱신 모드( '+' )에서는 입력과 출력이 모두 수행될 수 있지만, 출력 후에는 fflush , fseek , fsetpos 또는 rewind 호출 없이는 입력을 수행할 수 없으며, 입력 후에는 fseek , fsetpos 또는 rewind 호출 없이는 출력을 수행할 수 없습니다. 단, 입력 작업에서 파일 끝을 만난 경우는 예외입니다. 갱신 모드에서는 텍스트 모드가 지정된 경우에도 구현체가 바이너리 모드를 사용하도록 허용됩니다. | ||||
| 파일 접근 모드 플래그 "x" 를 선택적으로 "w" 또는 "w+" 지정자에 추가할 수 있습니다. 이 플래그는 파일이 존재할 때 덮어쓰는 대신 함수가 실패하도록 강제합니다. (C11) | ||||
| fopen_s 또는 freopen_s 를 사용할 때, "w" 또는 "a" 로 생성된 모든 파일에 대한 파일 접근 권한은 다른 사용자의 접근을 방지합니다. 파일 접근 모드 플래그 "u" 를 선택적으로 "w" 또는 "a" 로 시작하는 지정자 앞에 추가하여 기본 fopen 권한을 활성화할 수 있습니다. (C11) | ||||
반환값
1)
성공 시, 새로운 파일 스트림에 대한 포인터를 반환합니다.
filename
이 상호작용 장치를 참조하지 않는 한 스트림은 완전히 버퍼링됩니다.
오류 발생 시, 널 포인터를 반환합니다.
POSIX에서는
이 경우
errno
가 설정되어야 합니다.
2)
성공 시, 0을 반환하고 새로운 파일 스트림에 대한 포인터가
*
streamptr
에 기록됩니다. 오류 발생 시, 0이 아닌 에러 코드를 반환하고 null 포인터를
*
streamptr
에 기록합니다
streamptr
자체가 null 포인터인 경우는 제외).
참고 사항
filename
의 형식은 구현에 따라 정의되며, 반드시 파일을 참조하지 않을 수 있습니다(예: 파일 시스템 API를 통해 접근 가능한 콘솔이나 다른 장치일 수 있음). 이를 지원하는 플랫폼에서는
filename
에 절대 또는 상대 파일 시스템 경로가 포함될 수 있습니다.
예제
이 코드 실행
#include <stdio.h> #include <stdlib.h> int main(void) { const char* fname = "/tmp/unique_name.txt"; // or tmpnam(NULL); int is_ok = EXIT_FAILURE; FILE* fp = fopen(fname, "w+"); if (!fp) { perror("File opening failed"); return is_ok; } fputs("Hello, world!\n", fp); rewind(fp); int c; // note: int, not char, required to handle EOF while ((c = fgetc(fp)) != EOF) // standard C I/O file reading loop putchar(c); if (ferror(fp)) puts("I/O error when reading"); else if (feof(fp)) { puts("End of file is reached successfully"); is_ok = EXIT_SUCCESS; } fclose(fp); remove(fname); return is_ok; }
가능한 출력:
Hello, world! End of file is reached successfully
참조문헌
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.21.5.3 fopen 함수 (p: 223-224)
-
- K.3.5.2.1 fopen_s 함수 (p: 428-429)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.21.5.3 The fopen function (p: 305-306)
-
- K.3.5.2.1 The fopen_s function (p: 588-590)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.19.5.3 The fopen 함수 (p: 271-272)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.9.5.3 fopen 함수
참고 항목
|
파일을 닫음
(함수) |
|
|
출력 스트림을 실제 파일과 동기화
(함수) |
|
|
(C11)
|
기존 스트림을 다른 이름으로 열기
(함수) |
|
C++ documentation
for
fopen
|
|