[UNIX 환경 고급 프로그래밍] 표준 I/O 라이브러리
27909 단어 UNIX 환경 고급 프로그래밍 독서 노트
1 흐름 및 FILE 객체
표준 I/O 라이브러리에 대한 작업은 흐름(stream)을 둘러싸고 진행되며 표준 I/O 라이브러리로 파일을 열거나 만들 때 하나의 흐름을 파일과 연결시켰다.ASCII 문자 세트의 경우 문자는 바이트로 표시됩니다.국제 문자 세트의 경우 한 문자를 여러 바이트로 표시할 수 있습니다.표준 입출력 파일 스트림은 1바이트 또는 멀티바이트 문자 세트에 사용할 수 있습니다.freopen 함수는 흐름의 방향을 제거합니다. fwide 함수는 흐름의 방향을 설정하는 데 사용됩니다.#include
// A positive return value means wide-character oriented.
// A negative return value means byte oriented.
// A return value of zero means undecided.
int fwide(FILE* stream, int mode);
mode 매개 변수에 따라 fwide 함수는 서로 다른 기능을 수행한다.[1]. 만약 mode 매개 변수의 값이 마이너스라면 fwide는 지정한 흐름을 바이트의 방향으로 바꾸려고 시도한다.[2] 모델 매개 변수의 값이 양이면 fwide는 지정한 흐름을 넓게 하려고 시도합니다.[3] 모델 매개 변수의 값이 0이면 fwide는 흐름의 방향을 설정하려고 하지 않지만, 이 흐름의 방향을 표시하는 값을 되돌려줍니다.
2 표준 입력, 표준 출력 및 표준 오류
하나의 프로세스에 대해 세 가지 흐름을 미리 정의했다. 표준 입력, 표준 출력, 표준 오류이다. 이 세 가지 표준 입출력 흐름은 미리 정의된 파일 지침인 stdin, stdout, stderr를 통해 인용되고 에 정의된다.
3 버퍼
표준 입출력 라이브러리에서 버퍼링을 제공하는 것은read와 write 호출 횟수를 최대한 줄이기 위해서입니다.또한 각 표준 입출력 스트림에 대해 자동으로 버퍼 관리를 수행합니다.표준 I/O는 다음과 같은 3가지 버퍼를 제공합니다. [1] 전체 버퍼: 표준 I/O 버퍼를 채운 후에야 실제 I/O 작업을 수행할 수 있습니다.[2] 줄 버퍼: 입력과 출력에서 줄 바꿈 문자를 만났을 때 표준 입출력 라이브러리는 입출력 작업을 수행하고 흐름이 단말기와 관련될 때 줄 버퍼를 사용한다.[3] 버퍼 없음: 표준 입출력 라이브러리 부대 문자로 버퍼 저장.ISO/C에는 다음과 같은 버퍼 특성이 필요합니다[1]. 표준 입력과 표준 출력이 상호작용 장치를 가리키지 않을 때만 버퍼링이 가능합니다.[2] 표준 오류는 결코 완충된 것이 아니다.[3] 표준 오류 시 버퍼링이 없습니다.[4] 터미널 장치의 흐름을 가리키면 행 버퍼링이고 그렇지 않으면 전체 버퍼링이다.주어진 흐름에 대해 다음 두 함수를 호출하여 버퍼 형식을 변경할 수 있습니다.#include
void setbuf(FILE* stream, char* buf);
int setvbuff(FILE* stream, char* buf, int mode, size_t size);
mode 매개 변수:IOFBF 전체 버퍼링IOLBF 행 버퍼링IONBF 버퍼 없음
함수.
mode
buf
버퍼 및 길이
버퍼 유형
setbuf
비어있지 않음
길이가 BUFSIZ인 사용자 버퍼 buf
전체 버퍼 또는 행 버퍼
setbuf
NULL
(버퍼 없음)
버퍼 없음
setvbuf
_IOFBF
비어있지 않음
크기 사용자 버퍼 버퍼
완충
setvbuf
_IOFBF
NULL
시스템 버퍼 길이
완충
setvbuf
_IOLBF
비어있지 않음
크기 사용자 버퍼 버퍼
행 버퍼
setvbuf
_IOLBF
NULL
시스템 버퍼 길이
행 버퍼
setvbuf
_IONBF
(무시)
(버퍼 없음)
버퍼 없음
언제든지 우리는 한 흐름을 강제로 씻을 수 있다.#include
int fflush(FILE* stream);
이 함수는 이 흐름의 모든 쓰이지 않은 데이터를 핵으로 전송합니다.stream이 NULL이면 이 함수는 모든 출력 흐름을 씻어냅니다.
4 흐름 열기
다음 세 함수에서 표준 입출력 스트림을 엽니다.#include
// return a file pointer or NULL if an error occurred.
FILE* fopen(const char* path, const char* mode);
FILE* fdopen(int fd, const char* mode);
FILE* freopen(const char* path, const char* mode, FILE* stream);
이 세 함수의 차이는 다음과 같다. [1] fopen 함수는 경로 이름이 pathname인 지정한 파일을 엽니다.[2]freopen 함수는 지정한 흐름에서 지정한 파일을 엽니다. 흐름이 열려 있으면 먼저 닫고 흐름이 정해져 있으면freopen으로 방향을 분명히 합니다.일반적으로 지정된 파일을 미리 정의된 흐름인 표준 입력, 표준 출력 또는 표준 오류로 열 수 있습니다.[3] fdopen 함수는 기존의 파일 설명자를 추출하고 표준 입출력 흐름을 이 설명자와 결합시킨다.이 함수는 일반적으로 파이프와 네트워크 통신 파이프 함수가 되돌아오는 설명자를 만드는 데 사용됩니다.
type
설명
open(2) 플래그
r 또는 rb
읽기 위해 열기
O_RDONLY
w 또는 wb
파일을 0으로 자르거나 쓰기 위해 만듭니다
O_WRONLY | O_CREAT | O_TRUNC
a 또는 ab
추가 또는 쓰기 위해 열기
O_WRONLY | O_CREAT | O_APPEND
r+ 또는 r+b 또는 rb+
읽기 및 쓰기 위해 열기
O_RDWR
w+ 또는 w+b 또는 wwb+
파일을 0으로 자르거나 쓰기 위해 열기
O_RDWR | O_CREAT | O_TRUNC
a+ 또는 a+b 또는 ab+
파일의 끝에서 읽고 쓰기 위해 열거나 만들기
O_RDWR | O_CREAT | O_APPEND
fdopen 함수에 대해 type 매개 변수의 의미는 다소 다르다. 1 파일을 읽고 쓰는 방식으로 열 때 다음과 같은 제한이 있다[1]. 중간에 fflush, fseek, fsetpos 또는rewind가 없으면 출력 후 직접 입력을 따라갈 수 없다.[2] 중간에 fseek, fsetpos, 또는rewind가 없거나 입력 작업이 파일 끝에 도착하지 않으면 입력 작업 후에 출력을 직접 따라갈 수 없다.
fclose를 호출하여 열린 흐름을 닫습니다.#include
// return 0 or EOF if an error occurred.
inf fclose(FILE* fp);
5 읽기와 쓰기 흐름
스트림이 켜진 경우 3의 포맷되지 않은 입출력 유형 중 하나를 선택하여 읽기, 쓰기 작업을 수행할 수 있습니다.[1] 각 문자의 I/O는 스트림이 버퍼링된 경우 표준 I/O 함수가 모든 버퍼링을 처리합니다.[2] 각 행의 입출력입니다.[3] 직접 I/O
5.1 1자당 I/O
#include
int get(FILE* stream);
int fgetc(FILE* stream);
int getchar(void);
#include
int putc(int c, FILE* stream);
int fputc(int c, FILE* stream);
int putchar(int c);
#include
int ungetc(int c, FILE* stream);
함수 getchar는 getc(stdin)와 같아서 fgetc 함수를 사용하는 것이 안전하다.함수putchar©putc(c,stdout)와 같이 fputc 함수를 사용하는 것이 좋습니다.흐름에서 데이터를 읽은 후 ungetc를 호출하여 문자를 다시 흐름으로 압축할 수 있습니다.
5.2 한 줄당 입출력
#include
char* gets(char* s);
char* fgets(char* s, int size, FILE* stream);
#include
int puts(const char* s);
int fputs(const char* s, FILE* stream);
5.3 직접 I/O(이진 I/O)
#include
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
// usage
float data[10];
if (fwrite(&data[2], sizeof(float), 4, fp) != 4)
// error handler.
struct
{
short count;
long total;
char name[255];
} item;
if (fwrite(&item, sizeof(item), 1, fp) != 1)
// error handler.
6 포지셔닝 흐름 #include
int fseek(FILE* stream, long offset, int whence);
long ftell(FILE* stream);
void rewind(FILE* stream);
int fseeko(FILE* stream, off_t offset, int whence);
off_t ftello(FILE* stream);
int fgetpos(FILE* stream, fpos_t* pos);
int fsetpos(FILE* stream, fpos_t* pos);
7 입출력 포맷
7.1 출력 서식 적용
#include
int printf(const char* format, ...);
int fprintf(FILE* stream, const char* format, ...);
int dprintf(int fd, const char* format, ...);
int sprintf(char* str, const char* format, ...);
int snprintf(char* str, size_t size, const char* format, ...);
#include
int vprintf(const char* format, va_list ap);
int vfprintf(FILE* stream, const char* format, va_list ap);
int vdprintf(int fd, const char* format, va_list ap);
int vsprintf(char* str, const char* format, va_list ap);
int vsnprintf(char* str, size_t size, const char* format, va_list ap);
구체적인 포맷 파라미터는 포맷 문자열 파라미터 소개를 보십시오.
7.2 서식 적용 입력
#include
int scanf(const char* format, ...);
int fscanf(FILE* stream, const char* format, ...);
int sscanf(const char* str, const char* format, ...);
#include
int vscanf(cosnt char* format, va_list ap);
int vsscanf(const char* str, const char* format, va_list ap);
int vfscanf(FILE* stream, const char* format, va_list ap);
8 임시 파일 #include
char* tmpnam(char* s);
FILE* tmpfile(void);
이 설명자가 열려 있기 때문에 fdopen 함수는 쓰기 위해 열려 있으며, 이 파일을 끊지 않습니다.또한 표준 입출력 추가 쓰기 방식을 파일 생성에 사용할 수도 없습니다.↩︎
#include
// A positive return value means wide-character oriented.
// A negative return value means byte oriented.
// A return value of zero means undecided.
int fwide(FILE* stream, int mode);
하나의 프로세스에 대해 세 가지 흐름을 미리 정의했다. 표준 입력, 표준 출력, 표준 오류이다. 이 세 가지 표준 입출력 흐름은 미리 정의된 파일 지침인 stdin, stdout, stderr를 통해 인용되고 에 정의된다.
3 버퍼
표준 입출력 라이브러리에서 버퍼링을 제공하는 것은read와 write 호출 횟수를 최대한 줄이기 위해서입니다.또한 각 표준 입출력 스트림에 대해 자동으로 버퍼 관리를 수행합니다.표준 I/O는 다음과 같은 3가지 버퍼를 제공합니다. [1] 전체 버퍼: 표준 I/O 버퍼를 채운 후에야 실제 I/O 작업을 수행할 수 있습니다.[2] 줄 버퍼: 입력과 출력에서 줄 바꿈 문자를 만났을 때 표준 입출력 라이브러리는 입출력 작업을 수행하고 흐름이 단말기와 관련될 때 줄 버퍼를 사용한다.[3] 버퍼 없음: 표준 입출력 라이브러리 부대 문자로 버퍼 저장.ISO/C에는 다음과 같은 버퍼 특성이 필요합니다[1]. 표준 입력과 표준 출력이 상호작용 장치를 가리키지 않을 때만 버퍼링이 가능합니다.[2] 표준 오류는 결코 완충된 것이 아니다.[3] 표준 오류 시 버퍼링이 없습니다.[4] 터미널 장치의 흐름을 가리키면 행 버퍼링이고 그렇지 않으면 전체 버퍼링이다.주어진 흐름에 대해 다음 두 함수를 호출하여 버퍼 형식을 변경할 수 있습니다.#include
void setbuf(FILE* stream, char* buf);
int setvbuff(FILE* stream, char* buf, int mode, size_t size);
mode 매개 변수:IOFBF 전체 버퍼링IOLBF 행 버퍼링IONBF 버퍼 없음
함수.
mode
buf
버퍼 및 길이
버퍼 유형
setbuf
비어있지 않음
길이가 BUFSIZ인 사용자 버퍼 buf
전체 버퍼 또는 행 버퍼
setbuf
NULL
(버퍼 없음)
버퍼 없음
setvbuf
_IOFBF
비어있지 않음
크기 사용자 버퍼 버퍼
완충
setvbuf
_IOFBF
NULL
시스템 버퍼 길이
완충
setvbuf
_IOLBF
비어있지 않음
크기 사용자 버퍼 버퍼
행 버퍼
setvbuf
_IOLBF
NULL
시스템 버퍼 길이
행 버퍼
setvbuf
_IONBF
(무시)
(버퍼 없음)
버퍼 없음
언제든지 우리는 한 흐름을 강제로 씻을 수 있다.#include
int fflush(FILE* stream);
이 함수는 이 흐름의 모든 쓰이지 않은 데이터를 핵으로 전송합니다.stream이 NULL이면 이 함수는 모든 출력 흐름을 씻어냅니다.
4 흐름 열기
다음 세 함수에서 표준 입출력 스트림을 엽니다.#include
// return a file pointer or NULL if an error occurred.
FILE* fopen(const char* path, const char* mode);
FILE* fdopen(int fd, const char* mode);
FILE* freopen(const char* path, const char* mode, FILE* stream);
이 세 함수의 차이는 다음과 같다. [1] fopen 함수는 경로 이름이 pathname인 지정한 파일을 엽니다.[2]freopen 함수는 지정한 흐름에서 지정한 파일을 엽니다. 흐름이 열려 있으면 먼저 닫고 흐름이 정해져 있으면freopen으로 방향을 분명히 합니다.일반적으로 지정된 파일을 미리 정의된 흐름인 표준 입력, 표준 출력 또는 표준 오류로 열 수 있습니다.[3] fdopen 함수는 기존의 파일 설명자를 추출하고 표준 입출력 흐름을 이 설명자와 결합시킨다.이 함수는 일반적으로 파이프와 네트워크 통신 파이프 함수가 되돌아오는 설명자를 만드는 데 사용됩니다.
type
설명
open(2) 플래그
r 또는 rb
읽기 위해 열기
O_RDONLY
w 또는 wb
파일을 0으로 자르거나 쓰기 위해 만듭니다
O_WRONLY | O_CREAT | O_TRUNC
a 또는 ab
추가 또는 쓰기 위해 열기
O_WRONLY | O_CREAT | O_APPEND
r+ 또는 r+b 또는 rb+
읽기 및 쓰기 위해 열기
O_RDWR
w+ 또는 w+b 또는 wwb+
파일을 0으로 자르거나 쓰기 위해 열기
O_RDWR | O_CREAT | O_TRUNC
a+ 또는 a+b 또는 ab+
파일의 끝에서 읽고 쓰기 위해 열거나 만들기
O_RDWR | O_CREAT | O_APPEND
fdopen 함수에 대해 type 매개 변수의 의미는 다소 다르다. 1 파일을 읽고 쓰는 방식으로 열 때 다음과 같은 제한이 있다[1]. 중간에 fflush, fseek, fsetpos 또는rewind가 없으면 출력 후 직접 입력을 따라갈 수 없다.[2] 중간에 fseek, fsetpos, 또는rewind가 없거나 입력 작업이 파일 끝에 도착하지 않으면 입력 작업 후에 출력을 직접 따라갈 수 없다.
fclose를 호출하여 열린 흐름을 닫습니다.#include
// return 0 or EOF if an error occurred.
inf fclose(FILE* fp);
5 읽기와 쓰기 흐름
스트림이 켜진 경우 3의 포맷되지 않은 입출력 유형 중 하나를 선택하여 읽기, 쓰기 작업을 수행할 수 있습니다.[1] 각 문자의 I/O는 스트림이 버퍼링된 경우 표준 I/O 함수가 모든 버퍼링을 처리합니다.[2] 각 행의 입출력입니다.[3] 직접 I/O
5.1 1자당 I/O
#include
int get(FILE* stream);
int fgetc(FILE* stream);
int getchar(void);
#include
int putc(int c, FILE* stream);
int fputc(int c, FILE* stream);
int putchar(int c);
#include
int ungetc(int c, FILE* stream);
함수 getchar는 getc(stdin)와 같아서 fgetc 함수를 사용하는 것이 안전하다.함수putchar©putc(c,stdout)와 같이 fputc 함수를 사용하는 것이 좋습니다.흐름에서 데이터를 읽은 후 ungetc를 호출하여 문자를 다시 흐름으로 압축할 수 있습니다.
5.2 한 줄당 입출력
#include
char* gets(char* s);
char* fgets(char* s, int size, FILE* stream);
#include
int puts(const char* s);
int fputs(const char* s, FILE* stream);
5.3 직접 I/O(이진 I/O)
#include
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
// usage
float data[10];
if (fwrite(&data[2], sizeof(float), 4, fp) != 4)
// error handler.
struct
{
short count;
long total;
char name[255];
} item;
if (fwrite(&item, sizeof(item), 1, fp) != 1)
// error handler.
6 포지셔닝 흐름 #include
int fseek(FILE* stream, long offset, int whence);
long ftell(FILE* stream);
void rewind(FILE* stream);
int fseeko(FILE* stream, off_t offset, int whence);
off_t ftello(FILE* stream);
int fgetpos(FILE* stream, fpos_t* pos);
int fsetpos(FILE* stream, fpos_t* pos);
7 입출력 포맷
7.1 출력 서식 적용
#include
int printf(const char* format, ...);
int fprintf(FILE* stream, const char* format, ...);
int dprintf(int fd, const char* format, ...);
int sprintf(char* str, const char* format, ...);
int snprintf(char* str, size_t size, const char* format, ...);
#include
int vprintf(const char* format, va_list ap);
int vfprintf(FILE* stream, const char* format, va_list ap);
int vdprintf(int fd, const char* format, va_list ap);
int vsprintf(char* str, const char* format, va_list ap);
int vsnprintf(char* str, size_t size, const char* format, va_list ap);
구체적인 포맷 파라미터는 포맷 문자열 파라미터 소개를 보십시오.
7.2 서식 적용 입력
#include
int scanf(const char* format, ...);
int fscanf(FILE* stream, const char* format, ...);
int sscanf(const char* str, const char* format, ...);
#include
int vscanf(cosnt char* format, va_list ap);
int vsscanf(const char* str, const char* format, va_list ap);
int vfscanf(FILE* stream, const char* format, va_list ap);
8 임시 파일 #include
char* tmpnam(char* s);
FILE* tmpfile(void);
이 설명자가 열려 있기 때문에 fdopen 함수는 쓰기 위해 열려 있으며, 이 파일을 끊지 않습니다.또한 표준 입출력 추가 쓰기 방식을 파일 생성에 사용할 수도 없습니다.↩︎
#include
void setbuf(FILE* stream, char* buf);
int setvbuff(FILE* stream, char* buf, int mode, size_t size);
#include
int fflush(FILE* stream);
다음 세 함수에서 표준 입출력 스트림을 엽니다.
#include
// return a file pointer or NULL if an error occurred.
FILE* fopen(const char* path, const char* mode);
FILE* fdopen(int fd, const char* mode);
FILE* freopen(const char* path, const char* mode, FILE* stream);
이 세 함수의 차이는 다음과 같다. [1] fopen 함수는 경로 이름이 pathname인 지정한 파일을 엽니다.[2]freopen 함수는 지정한 흐름에서 지정한 파일을 엽니다. 흐름이 열려 있으면 먼저 닫고 흐름이 정해져 있으면freopen으로 방향을 분명히 합니다.일반적으로 지정된 파일을 미리 정의된 흐름인 표준 입력, 표준 출력 또는 표준 오류로 열 수 있습니다.[3] fdopen 함수는 기존의 파일 설명자를 추출하고 표준 입출력 흐름을 이 설명자와 결합시킨다.이 함수는 일반적으로 파이프와 네트워크 통신 파이프 함수가 되돌아오는 설명자를 만드는 데 사용됩니다.
type
설명
open(2) 플래그
r 또는 rb
읽기 위해 열기
O_RDONLY
w 또는 wb
파일을 0으로 자르거나 쓰기 위해 만듭니다
O_WRONLY | O_CREAT | O_TRUNC
a 또는 ab
추가 또는 쓰기 위해 열기
O_WRONLY | O_CREAT | O_APPEND
r+ 또는 r+b 또는 rb+
읽기 및 쓰기 위해 열기
O_RDWR
w+ 또는 w+b 또는 wwb+
파일을 0으로 자르거나 쓰기 위해 열기
O_RDWR | O_CREAT | O_TRUNC
a+ 또는 a+b 또는 ab+
파일의 끝에서 읽고 쓰기 위해 열거나 만들기
O_RDWR | O_CREAT | O_APPEND
fdopen 함수에 대해 type 매개 변수의 의미는 다소 다르다. 1 파일을 읽고 쓰는 방식으로 열 때 다음과 같은 제한이 있다[1]. 중간에 fflush, fseek, fsetpos 또는rewind가 없으면 출력 후 직접 입력을 따라갈 수 없다.[2] 중간에 fseek, fsetpos, 또는rewind가 없거나 입력 작업이 파일 끝에 도착하지 않으면 입력 작업 후에 출력을 직접 따라갈 수 없다.
fclose를 호출하여 열린 흐름을 닫습니다.
#include
// return 0 or EOF if an error occurred.
inf fclose(FILE* fp);
5 읽기와 쓰기 흐름
스트림이 켜진 경우 3의 포맷되지 않은 입출력 유형 중 하나를 선택하여 읽기, 쓰기 작업을 수행할 수 있습니다.[1] 각 문자의 I/O는 스트림이 버퍼링된 경우 표준 I/O 함수가 모든 버퍼링을 처리합니다.[2] 각 행의 입출력입니다.[3] 직접 I/O
5.1 1자당 I/O
#include
int get(FILE* stream);
int fgetc(FILE* stream);
int getchar(void);
#include
int putc(int c, FILE* stream);
int fputc(int c, FILE* stream);
int putchar(int c);
#include
int ungetc(int c, FILE* stream);
함수 getchar는 getc(stdin)와 같아서 fgetc 함수를 사용하는 것이 안전하다.함수putchar©putc(c,stdout)와 같이 fputc 함수를 사용하는 것이 좋습니다.흐름에서 데이터를 읽은 후 ungetc를 호출하여 문자를 다시 흐름으로 압축할 수 있습니다.
5.2 한 줄당 입출력
#include
char* gets(char* s);
char* fgets(char* s, int size, FILE* stream);
#include
int puts(const char* s);
int fputs(const char* s, FILE* stream);
5.3 직접 I/O(이진 I/O)
#include
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
// usage
float data[10];
if (fwrite(&data[2], sizeof(float), 4, fp) != 4)
// error handler.
struct
{
short count;
long total;
char name[255];
} item;
if (fwrite(&item, sizeof(item), 1, fp) != 1)
// error handler.
6 포지셔닝 흐름 #include
int fseek(FILE* stream, long offset, int whence);
long ftell(FILE* stream);
void rewind(FILE* stream);
int fseeko(FILE* stream, off_t offset, int whence);
off_t ftello(FILE* stream);
int fgetpos(FILE* stream, fpos_t* pos);
int fsetpos(FILE* stream, fpos_t* pos);
7 입출력 포맷
7.1 출력 서식 적용
#include
int printf(const char* format, ...);
int fprintf(FILE* stream, const char* format, ...);
int dprintf(int fd, const char* format, ...);
int sprintf(char* str, const char* format, ...);
int snprintf(char* str, size_t size, const char* format, ...);
#include
int vprintf(const char* format, va_list ap);
int vfprintf(FILE* stream, const char* format, va_list ap);
int vdprintf(int fd, const char* format, va_list ap);
int vsprintf(char* str, const char* format, va_list ap);
int vsnprintf(char* str, size_t size, const char* format, va_list ap);
구체적인 포맷 파라미터는 포맷 문자열 파라미터 소개를 보십시오.
7.2 서식 적용 입력
#include
int scanf(const char* format, ...);
int fscanf(FILE* stream, const char* format, ...);
int sscanf(const char* str, const char* format, ...);
#include
int vscanf(cosnt char* format, va_list ap);
int vsscanf(const char* str, const char* format, va_list ap);
int vfscanf(FILE* stream, const char* format, va_list ap);
8 임시 파일 #include
char* tmpnam(char* s);
FILE* tmpfile(void);
이 설명자가 열려 있기 때문에 fdopen 함수는 쓰기 위해 열려 있으며, 이 파일을 끊지 않습니다.또한 표준 입출력 추가 쓰기 방식을 파일 생성에 사용할 수도 없습니다.↩︎
#include
int get(FILE* stream);
int fgetc(FILE* stream);
int getchar(void);
#include
int putc(int c, FILE* stream);
int fputc(int c, FILE* stream);
int putchar(int c);
#include
int ungetc(int c, FILE* stream);
#include
char* gets(char* s);
char* fgets(char* s, int size, FILE* stream);
#include
int puts(const char* s);
int fputs(const char* s, FILE* stream);
#include
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
// usage
float data[10];
if (fwrite(&data[2], sizeof(float), 4, fp) != 4)
// error handler.
struct
{
short count;
long total;
char name[255];
} item;
if (fwrite(&item, sizeof(item), 1, fp) != 1)
// error handler.
#include
int fseek(FILE* stream, long offset, int whence);
long ftell(FILE* stream);
void rewind(FILE* stream);
int fseeko(FILE* stream, off_t offset, int whence);
off_t ftello(FILE* stream);
int fgetpos(FILE* stream, fpos_t* pos);
int fsetpos(FILE* stream, fpos_t* pos);
7 입출력 포맷
7.1 출력 서식 적용
#include
int printf(const char* format, ...);
int fprintf(FILE* stream, const char* format, ...);
int dprintf(int fd, const char* format, ...);
int sprintf(char* str, const char* format, ...);
int snprintf(char* str, size_t size, const char* format, ...);
#include
int vprintf(const char* format, va_list ap);
int vfprintf(FILE* stream, const char* format, va_list ap);
int vdprintf(int fd, const char* format, va_list ap);
int vsprintf(char* str, const char* format, va_list ap);
int vsnprintf(char* str, size_t size, const char* format, va_list ap);
구체적인 포맷 파라미터는 포맷 문자열 파라미터 소개를 보십시오.
7.2 서식 적용 입력
#include
int scanf(const char* format, ...);
int fscanf(FILE* stream, const char* format, ...);
int sscanf(const char* str, const char* format, ...);
#include
int vscanf(cosnt char* format, va_list ap);
int vsscanf(const char* str, const char* format, va_list ap);
int vfscanf(FILE* stream, const char* format, va_list ap);
8 임시 파일 #include
char* tmpnam(char* s);
FILE* tmpfile(void);
이 설명자가 열려 있기 때문에 fdopen 함수는 쓰기 위해 열려 있으며, 이 파일을 끊지 않습니다.또한 표준 입출력 추가 쓰기 방식을 파일 생성에 사용할 수도 없습니다.↩︎
#include
int printf(const char* format, ...);
int fprintf(FILE* stream, const char* format, ...);
int dprintf(int fd, const char* format, ...);
int sprintf(char* str, const char* format, ...);
int snprintf(char* str, size_t size, const char* format, ...);
#include
int vprintf(const char* format, va_list ap);
int vfprintf(FILE* stream, const char* format, va_list ap);
int vdprintf(int fd, const char* format, va_list ap);
int vsprintf(char* str, const char* format, va_list ap);
int vsnprintf(char* str, size_t size, const char* format, va_list ap);
#include
int scanf(const char* format, ...);
int fscanf(FILE* stream, const char* format, ...);
int sscanf(const char* str, const char* format, ...);
#include
int vscanf(cosnt char* format, va_list ap);
int vsscanf(const char* str, const char* format, va_list ap);
int vfscanf(FILE* stream, const char* format, va_list ap);
#include
char* tmpnam(char* s);
FILE* tmpfile(void);
이 설명자가 열려 있기 때문에 fdopen 함수는 쓰기 위해 열려 있으며, 이 파일을 끊지 않습니다.또한 표준 입출력 추가 쓰기 방식을 파일 생성에 사용할 수도 없습니다.↩︎