본문 바로가기

공부/tcp/ip 프로그래밍

15장 소켓과 표준 입출력

반응형

입출력함수.pptx

 

컴퓨터 시스템 구조 

 

저수준 입출력 함수를 이용하기 위해 open함수를 이용함
Open함수는 파일 서술자를 반환
고수준 입출력 함수를 이용하기 위해 fopen함수를 이용함
fopen함수는 파일에 대한 구조체(파일에 대한 정보가 들어있음, 파일의 현재커서위치, 파일의 끝에 도달여부, 파일의 이름 등등)를 반환

 

저수준 입출력 함수는 파일 서술자(= 파일을 나타내는 숫자로 표현됨)를 이용
고수준 입출력 함수는 스트림을 이용, 스트림은 버퍼를 가지고 있음

 

 

파일 서술자나 파일에 대한 구조체는 파일을 찾아가기 위한 지도라고 생각해도 됨
파일이 어디에 있고 파일에 대한 설명을 가지고 있기 때문에

 

 

 

파일 서술자를 이용한 입출력은 파일 서술자가 나타내는 파일에서 정보를 보내거나 받아옴

스트림(=다리)를 이용한 입출력은 파일에 대한 구조체가 나타내는 파일에서
스트림을 통해서 정보가 보내거나 받게 됨

 

 

스트림을 이용한 입출력은 스트림(=다리)을 통해서 입출력을 하게 됨
스트림당 1개의 버퍼가 사용되므로 한 스트림이 입출력 둘 다하는 파일에 연결된
스트림이라면 출력시 버퍼에 아직 다 보내지 못한 정보가 남아있다고 한다면
남아 있는 정보가 다 보내지 못한 상태에서 스트림을 입력으로 사용하게 된다면
버퍼에 남아있는 정보를 읽어 버리게 되는 잘못된 현상이 발생하게 됨

 

 

소켓은 생성시 출력버퍼와 입력버퍼가 만들어짐

 

소켓을 쓰기와 읽기를 같이 하는 모드로 열게 되면 (=fdopen(socket, “rw”))
쓰기와 읽기 스트림이 각각 만들어 지지 않고 하나의 스트림으로 연결되기 때문에
버퍼가 한 개만 존재하므로 정보 전달시 fflush함수를 계속 반복적으로 사용해야 됨
그러므로 소켓의 출력버퍼와 입력버퍼에 각각 스트림을 연결하여
각각 버퍼를 사용해야 함
그러기 위해서 fdopen함수로 출력용스트림, 입력용스트림을 각각을 만들어서 연결함

fdopen(socket, “w”);
fdopen(socket, “r”);


 

반응형