728x90
입출 스트림의 분리
- 프로세스 기반의 분리 : write용 프로세스, read용 프로세스 fork를 통한 분리
- FILE 구조체 포인터 기반의 분리 : FILE 구조체를 각각 write와 read로 관리
readfp=fdopen(sock, "r");
writefp=fdopen(sock, "w");
스트림 분리 이후 half-close의 문제
- half-close : EOF를 전달하여 더 이상 보낼 데이터가 없다고 알리고 출력 스트림을 닫아버림
- fclose를 통해 FILE* 를 닫으면 연결된 파일 디스크립터도 close가 되어버림
- write에 사용하고 있던 FILE*를 닫으면 read도 제대로 이루어지지 않음
int main(int argc, char *argv[])
{
FILE * readfp;
FILE * writefp;
...;
readfp=fdopen(sock, "r");
writefp=fdopen(sock, "w");
...;
fclose(writefp);
...;
fgets(buf, sizoef(buf), readfp);
fclose(readfp);
return 0;
}
728x90
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 17-1. epoll의 이해와 활용 (0) | 2021.03.28 |
---|---|
열혈 TCP/IP 16-2. 파일 디스크립터의 복사와 half-close (0) | 2021.03.28 |
열혈 TCP/IP 15-3. 소켓 기반에서의 표준 입출력 함수 사용 (0) | 2021.03.28 |
열혈 TCP/IP 15-2. 표준 입출력 함수 사용 (0) | 2021.03.28 |
열혈 TCP/IP 15-1. 표준 입출력 함수의 장점 (0) | 2021.03.28 |