티스토리 뷰



* 본 포스팅은 한국소프트웨어진흥원 출처의 리눅스 네트워크 프로그래밍 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님 감사합니다.)



공유하기 링크
태그 클라우드
, , , ,
프로필사진

Yowu (Yu Yongwoo)

흔한 백엔드 개발자입니다
우분투 데스크탑 개발 환경을 선호합니다
최근에는 vscode에 neovim 모드 올려서 쓰고 있습니다
개발용 키보드는 역시 해피해킹 프로2 무각입니다
락 밴드에서 드럼을 쳤습니다

«   2020/01   »
      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  
글 보관함
Total
2,615,847
Today
43
Yesterday
772