15-1. 표준 입출력 함수의 장점
표준 입출력 함수의 장점
이식성이 좋아진다.
- 모든 시스템은 ANSI 표준 C를 지원한다.
효율성을 높일 수 있다.
- 표준 입출력 함수에 의한 버퍼를 제공받는다. (표준 입출력버퍼, 소켓 버퍼)
- 소켓 생성 버퍼 목적 : 프로토콜의 완성을 위한 것.
- 표준 입출력 버퍼 목적 : 성능 향상
파일 포인터와 파일 디스크립터
파일 포인터
- 표준 입출력 함수 호출을 위해서 필요한 파일 포인터. = FILE 구조체의 포인터.
파일 디스크립터를 이용한 시스템 입출력
- 시스템 입출력 함수 사용 시 필요
- 정수값이다.
※ 소켓 기반의 표준 입출력 함수 사용을 위해 파일 디스크립터를 기반으로 파일 포인터를 생성.
15-2. 표준 입출력 함수의 사용
파일 디스크립터 -> 파일 포인터
#include<stdio.h>
FILE * fdopen(int files, const char *mode);
리턴 : 성공시 FILE 포인터, 실패시 NULL
fdopen 후 파일 디스크립터와 파일 포인터 상태
※ 표준 입출력 함수를 사용할 경우 : 파일 버퍼 -> 소켓 버퍼 -> 실제 전송 혹은 수신.
파일 포인터 -> 파일 디스크립터
#include<stdio.h>
int fileno(FILE *stream);
리턴 : 파일 포인터가 가리키는 파일의 디스크립터 리턴.
stream : 파일 포인터. 파일 디스크립터는 파일 모드와는 상관이 없다.
15-3. 소켓 기반의 표준 입출력 함수의 사용
파일에 버퍼가 필요한 이유
CPU가 직접 I/O를 하면 비효율적이기 때문에 버퍼에 그 내용을 저장했다가 파일로 전송한다.
flag를 두어 CPU가 여유 있을 때 system call을 통해 버퍼 내용을 파일로 보낸다.
system call을 이용하면 모아서 입출력 하는 것이 힘들다.
하지만 파일 버퍼를 이용하면 데이터를 모아서 입출력하는 데 좋아진다.