이식성이 좋다.
ANSI C 기반의 표준 입출력 함수는 모든 컴파일러에서 지원을 하기 때문에 이식성이 좋다.
버퍼링을 통한 성능 향상에 도움이 된다.
표준 입출력 함수를 이용해 데이터를 전송할 경우 아래 그림처럼 소켓의 입출력 버퍼 이외의 버퍼를 이용해 버퍼링이 된다.
fflush
함수 호출이 빈번히 등장할 수 있다.소켓 생성 시 반환되는 것은 파일 디스크립터이다. 그런데 표준 함수에서 요구하는 것은 FILE 구조체 포인터이므로 파일 디스크립터를 FILE 구조체 포인터로 변환해야 한다.
함수 원형은 다음과 같다.
#include <stdio.h>
FILE * fdopen(int fildes, const char * mode);
예시 사용법은 다음과 같다.
FILE *fp;
int fd = open("data.dat", O_WRONLY | O_CREAT | O_TRUNC);
fp = fdopen(fd, "w");
fputs("Network C Programming", fp);
fclose(fp);
이번엔 반대로, fileno
함수를 통해 FILE 구조체 포인터를 파일 디스크립터로 변환할 수도 있다.
함수 원형은 다음과 같다. 심플하다.
#include <stdio.h>
int fileno(FILE *stream);
예제를 보자.
FILE *fp;
int fd = open("data.dat", O_WRONLY | O_CREAT | O_TRUNC);
printf("First file descriptor : %d\n", fd);
fp = fdopen(fd, "w");
fputs("TCP/IP socket programming\n, fp);
printf("Second file descriptor : %d\n", fileno(fp));
fclose(fp);