표준 입출력 함수와 시스템 함수

kkado·2022년 6월 5일
0

네트워크프로그래밍

목록 보기
12/16

표준 입출력 함수의 장점

이식성이 좋다.

ANSI C 기반의 표준 입출력 함수는 모든 컴파일러에서 지원을 하기 때문에 이식성이 좋다.

버퍼링을 통한 성능 향상에 도움이 된다.

표준 입출력 함수를 이용해 데이터를 전송할 경우 아래 그림처럼 소켓의 입출력 버퍼 이외의 버퍼를 이용해 버퍼링이 된다.

표준 입출력 함수의 사용에 불편한 점

  • 양방향 통신이 쉽지 않다
  • 상황에 따라 fflush 함수 호출이 빈번히 등장할 수 있다.
  • 파일 디스크립터를 FILE 구조체 포인터로 변환해야 한다.

소켓 생성 시 반환되는 것은 파일 디스크립터이다. 그런데 표준 함수에서 요구하는 것은 FILE 구조체 포인터이므로 파일 디스크립터를 FILE 구조체 포인터로 변환해야 한다.

FILE 구조체 포인터로 변환 : fdopen

함수 원형은 다음과 같다.

#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

이번엔 반대로, 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);
profile
울면안돼 쫄면안돼 냉면됩니다

0개의 댓글