티스토리 뷰
반응형
* 본 포스팅은 한국소프트웨어진흥원 출처의 리눅스 네트워크 프로그래밍 PDF 파일을 토대로 작성되었습니다.
* 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.
socket_number.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include "stdio.h" #include "stdlib.h" #include "unistd.h" #include "sys/types.h" // sys/types.h : 시스템 콜에 필요한 상수 선언 #include "sys/stat.h" // sys/stat.h : 파일의 상태에 대한 데이터 선언 #include "sys/socket.h" // sys/socket.h : 소켓 시스템 콜 선언 #include "fcntl.h" // fcntl.h : open에 필요한 flag 선언 void main() { int fd1, fd2, sd1, sd2; printf("getdtablesize() = %d\n", getdtablesize()); //파일 디스크립터의 최대 값. 시스템마다 다름 fd1 = open("/etc/passwd", O_RDONLY, 0); printf("/etc/passwd's fd = %d\n", fd1); // /etc/passwd 파일을 읽기모드(O_RDONLY)로 열기 sd1 = socket(PF_INET, SOCK_STREAM, 0); printf("stream socket descriptor = %d\n", sd1); // 스트림형 소켓 열기 sd2 = socket(PF_INET, SOCK_DGRAM, 0); printf("datagram socket descriptor = %d\n", sd2); // 데이터그램형 소켓 열기 fd2 = open("/etc/hosts", O_RDONLY, 0); printf("/etc/hosts's fd = %d\n", fd2); // /etc/hosts 파일을 읽기모드로 열기 close(fd2); close(fd1); close(sd2); close(sd1); //파일 및 소켓 닫기 } |
실행결과
getdtablesize() = 1024
/etc/passwd's fd = 3
stream socket descriptor = 4
datagram socket descriptor = 5
/etc/hosts's fd = 6
사전에 디스크립터로 등록된 0, 1, 2를 제외한
디스크립터가 각 파일을 open 할때 마다 하나씩 할당되었고
소켓함수를 사용할 때도 디스크립터가 순서대로 할당되는 것을 확인 할 수 있다.
※ 2014. 05. 16 추가내용
PF_INET 은 과거 BSD에서 사용되던 것으로 현재는 AF_ 접두사의 AF_INET을 사용한다고 합니다.
PF_ 의 경우 호환성 때문에 사용 중이지만 표준은 AF_ 라고 합니다. (sunyzero님 감사합니다.)
반응형
'개인공부 > 소켓 프로그래밍' 카테고리의 다른 글
리눅스 소켓 프로그래밍 08 : TCP 서버 작성절차, 함수 (0) | 2014.02.11 |
---|---|
리눅스 소켓 프로그래밍 07 : TCP 클라이언트 프로그램 예제 (0) | 2014.02.08 |
리눅스 소켓 프로그래밍 06 : TCP 클라이언트 작성절차, 함수 (0) | 2014.02.07 |
리눅스 소켓 프로그래밍 05 : IP, 도메인 주소변환 (3) | 2014.02.03 |
리눅스 소켓 프로그래밍 04 : 소켓주소 구조체 (0) | 2014.02.02 |
리눅스 소켓 프로그래밍 02 : 소켓 socket() 함수 (3) | 2014.02.02 |
리눅스 소켓 프로그래밍 01 : 소켓(Socket) 정의 (0) | 2014.02.02 |