[Network] 15. 소켓과 표준입출력

2023. 5. 28. 23:36

표준 입출력 함수의 장점

표준 입출력 함수의 장점과 단점

1. 이식성이 좋다.
2. 버퍼링(버퍼에 저장했다가 한꺼번에 전송하는 것)을 통한 성능 향상에 도움이 된다.

표준 입출력 함수를 이용해 데이터를 전송할 경우 소켓의 버퍼 이외의 버퍼를 통해 버퍼링이 진행된다. 

시스템 함수 ( read, write ) 는 버퍼링 없이 파일 복사를 진행하고 있기 때문에 상대적으로 표준 입출력 함수가 속도가 빠르다. (300MB 이상의 파일 복사를 테스트해보면 속도의 차이를 극명하게 느낄 수 있다.)

하지만, 표준 입출력 함수도 불편함이 있다.

1. 양방향 통신이 쉽지 않다.
2. 상황에 따라서 fflush 함수(출력 버퍼 비우는 기능)의 호출이 빈번하게 등장할 수도 있다.
3. 파일 디스크립터를 FILE 구조체 포인터로 바꿔야한다.

그래서 fopen 함수를 사용하면 버퍼링 때문에 입출력을 동시에 진행하는 것이 어렵다.

 

표준 입출력 함수 사용하기

fdopen 함수를 이용한 FILE 구조체 포인터로의 변환 (파일 디스크립터 -> FILE 구조체 포인터)

#include <stdio.h>

FILE * fdopen(int fildes, const char * mode);

 

fileno 함수를 이용한 파일 디스크립터로의 변환 (FILE 구조체 포인터 -> 파일 디스크립터)

#include <stdio.h>

int fileno(FILE*stream);

 

소켓 기반에서의 표준 입출력 함수 사용

입력용, 출력용 FILE 구조체 포인터를 각각 생성하여 사용한다.

표준 C 입출력 함수를 사용할 경우 소켓의 버퍼 이외에 버퍼링이 된다. 그래서 fflush 함수를 직접 호출해야한다.

사용 순서

1. 파일 디스크립터를 FILE 구조체 포인터로 변환
2. 표준 입출력 함수의 호출
3. fflush 함수 호출로 버퍼 비움

 

BELATED ARTICLES

more