read (2)와 write (2)는 소켓 디스크립터와 파일 디스크립터 모두에서 작동합니다. 파일 기술자의 경우, 사용자 파일 기술자 테이블 -> 파일 테이블과 마지막으로 파일 형식 (정규 파일/char/블록)을 검사하는 inode 테이블로 이동하여 그에 따라 읽습니다. char spl 파일의 경우 char 장치 스위치의 파일의 주요 번호를 기반으로 함수 포인터를 가져오고 해당 장치에 대해 등록 된 적절한 읽기/쓰기 루틴을 호출합니다. 마찬가지로 블록 장치 스위치에서 함수 포인터를 가져 와서 블록 특수 파일에 대해 적절한 읽기/쓰기 루틴이 호출됩니다.소켓 디스크립터와 파일 디스크립터
소켓 디스크립터에서 읽기/쓰기가 수행 될 때 어떤 일이 발생하는지 알려 주시기 바랍니다. read/write가 소켓 디스크립터에서 작동한다면, 소켓 대신 open을 사용하여 디스크립터를 얻을 수 없다.
당신을 말할 수 없다 ** 정확 ** (당신이 정말로 알고 싶다면 커널 소스에서 찾고 시도)하지만, 본질적으로는 통과 할 것이다 무슨 일 네트워크 인터페이스 카드 용 드라이버에 도달 할 때까지 네트워크 스택 아래로 전달할 TCP 드라이버에 대한 요청. 네트워크 스택의 각 계층이 일반적으로하는 일을 알고 싶다면 * OSI 모델 *을 찾으십시오. 'open'과'socket'의 경우 : 파일이나 소켓을 열지 여부에 따라 지정해야하는 정보가 다르므로 다른 인수를 사용합니다. – David
socket()을 호출 할 때 할당 된 데이터 구조, i 노드 테이블에 저장된 정보, 결국 네트워크 인터페이스 카드 드라이버 루틴에 도달하는 방법을 알고 싶습니다. –
읽기/쓰기는 시스템 호출을 감 쌉니다. 대부분의 작업은 커널 공간에서 수행됩니다. 그 추상화의 종류, 또는 "가상화": 그냥 블록 파일, 소켓, 또는 다른 많은 것들을 "파일"로 가져 가라. 파일에는 읽기, 쓰기, 열기 등과 같은 조작이 있습니다. 그러나 소켓 읽기 또는 디스크 파일 읽기의 실제 구현은 커널에 정의되어 있습니다. 필요한 경우 "write"를 정의하여 파일에서 읽을 수도 있습니다. – tristan