본문 바로가기
Programming/열혈 TCP, IP 소켓 프로그래밍(저자 윤성우)

Ch 16. 내용 확인문제

by minjunkim.dev 2020. 8. 10.

   모든 내용은 [윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어] 를 기반으로 제 나름대로 이해하여 정리한 것입니다. 다소 부정확한 내용이 있을수도 있으니 이를 유념하고 봐주세요!


01. 다음 중 FILE 구조체의 포인터와 파일 디스크립터에 대한 설명으로 옳은 것은?

d. 파일 디스크립터를 기반으로 FILE 구조체의 포인터를 생성하는 것은 가능하다.
그리고 이렇게 생성된 FILE 구조체의 포인터를 이용하면 소켓 기반의 데이터 입출력도 가능하다.

# 틀린 설명

a. FILE 구조체의 포인터와 마찬가지로 파일 디스크립터도 입력용과 출력용이 나뉜다.
=> 파일 디스크립터를 통해서 입출력 둘다 가능하다.

b. 파일 디스크립터가 복사되면 동일한 정수 값의 파일 디스크립터가 하나 더 추가되어서
총 두 개의 파일 디스크립터로 데이터를 입출력 할 수 있게 된다.

=> 파일 디스크립터의 복사가 동일한 정수값을 복사를 의미하는 것이 아니다.

=> 그리고 파일 디스크립터가 복사 되었다고 해도, 하나의 프로세스 안에 파일 디스크립터가 모두 존재하는 것이므로, 이중 하나의 파일 디스크립터만으로도 데이터 입출력이 가능하다.

c. 소켓 생성시 반환된 파일 디스크립터를 이용해서 입출력을 진행하는데,
파일 디스크립터를 거치지 않고 바로 소켓의 FILE 구조체 포인터를 반환 받아서 입출력에 사용하는 것도 가능하다.
=> 소켓은 생성시 파일 디스크립터만을 반환하므로, 반환된 파일 디스크립터를 fdopen() 함수를 통해 FILE 구조체 포인터로 변환해야만 한다.

e. 파일 디스크립터가 읽기모드이면, 이를 기반으로 생성되는 FILE 구조체의 포인터도 읽기모드가 되고,
파일 디스크립터가 쓰기모드이면, 이를 기반으로 생성되는 FILE 구조체의 포인터도 쓰기모드가 된다.
=> 파일 디스크립터를 임의로 읽기전용 또는 쓰기전용으로 코드를 작성하더라도 결국 입출력이 모두 가능하다. 따라서 파일 디스크립터를 FILE 구조체 포인터로 변환 시에 어떤 모드로 변환하느냐에 따라 달라진다.



02. EOF의 전송과 관련해서 옳은 것을 모두 고르면?

a. 파일 디스크립터가 종료되면 EOF가 전달된다.

b. 파일 디스크립터를 완전히 종료하지 않아도 출력 스트림에 대해서 종료를 진행하면 EOF가 전달된다.

c. 파일 디스크립터가 복사되고 나면, 복사된 파일 디스크립터까지 모두 종료되어야 EOF가 전달된다.

d. 파일 디스크립터가 복사된 상황이라 할지라도 shutdown 함수호출을 통해서 Half-close를 진행하면 상대 호스트로 EOF가 전달된다.

 

=> 모두 옳다.


 

[출처] : 윤성우 저, "열혈강의 TCP/IP 소켓 프로그래밍", 오렌지미디어