입출력함수

Download Report

Transcript 입출력함수

HIGH LEVEL
ANSI
APPLICATION
ANSI
Compiler
표준화된 내용
함수의 이름과 인자는 정해져 있음
OS에 상관없이 함수의 모습은 같음
(함수의 모습은 OS에 종속되지 않음)
겉모습은 종속하지 않아 보이지만 실제로는 low
level의 api를 이용해서 만들므로 os에 종속됨
개괄적인 부분
(자기가 원하는 기능이 제한적으로 제공됨, 여러
개의 API가 합쳐져 이루어짐))
LOW LEVEL
시스템함수
OS
HW
시스템함수
OS에 따라 달라짐
(OS에 종속)
세세한 부분까지 다뤄짐
(자기가 원하는 기능을 완벽하
게 제공됨)
저수준 입출력 함수를 이용하기 위해 open함수를 이용함
Open함수는 파일 서술자를 반환
고수준 입출력 함수를 이용하기 위해 fopen함수를 이용함
Fopen함수는 파일에 대한 구조체(파일에 대한 정보가 들어있음)를 반환
함수에 대한 반환 값
파일
서술자
program
파일에 대한
구조체
파일
저수준 입출력 함수는 파일 서술자(= 파일을 나타내는 숫자로 표현됨)를 이용
고수준 입출력 함수는 스트림을 이용, 스트림은 버퍼를 가지고 있음
파일 서술자나 파일에 대한 구조체는 파일자체라고 생각해도 됨
파일에 대해서 나타내고 있기 때문에
파일
파일 서술자
program
버퍼
파일에 대한 구조체
스트림
파일 서술자를 이용한 입출력은 파일 서술자가 나타내는 파일에서 정보를 보내거나 받아옴
스트림(=다리)를 이용한 입출력은 파일에 대한 구조체가 나타내는 파일에서
스트림을 통해서 정보가 보내거나 받게 됨
스트림을 이용한 입출력은 스트림(=다리)을 통해서 입출력을 하게 됨
스트림당 1개의 버퍼가 사용되므로 한 스트림이 입출력 둘 다하는 파일에 연결된
스트림이라면 출력시 버퍼에 아직 다 보내지 못한 정보가 남아있다고 한다면
남아 있는 정보가 다 보내지 못한 상태에서 스트림을 입력으로 사용하게 된다면
버퍼에 남아있는 정보를 읽어 버리게 되는 잘못된 현상이 발생하게 됨
소켓
소켓
프로그램
출력버퍼
입력버퍼
입력버퍼
출력버퍼
버퍼
버퍼
소켓은 생성시 출력버퍼와 입력버퍼가 만들어짐
소켓을 쓰기와 읽기를 같이 하는 모드로 열게 되면 (=fdopen(socket, “rw”))
쓰기와 읽기 스트림이 각각 만들어 지지 않고 하나의 스트림으로 연결되기 때문에
버퍼가 한 개만 존재하므로 정보 전달시 fflush함수를 계속 반복적으로 사용해야 됨
그러므로 소켓의 출력버퍼와 입력버퍼에 각각 스트림을 연결하여
각각 버퍼를 사용해야 함
그러기 위해서 fdopen함수로 출력용스트림, 입력용스트림을 각각을 만들어서 연결함
fdopen(socket, “w”);
fdopen(socket, “r”);
소켓
소켓
프로그램
출력버퍼
입력버퍼
입력버퍼
출력버퍼
버퍼