GETSERVENT(3)

명칭
getservent, getservbyport, getservbyname, setservent, endservent - 서비스 엔트리의 취득

프로그램 라이브러리
libc

서식
<netdb.h> struct servent * getservent() struct servent * getservbyname(const char *name, const char *proto) struct servent * getservbyport(int port, const char *proto) void setservent(int stayopen) void endservent(void)

해설
getservent(), getservbyname() 및 getservbyport() 함수는 각각, 다음에 나타내는 구조를 가지는 오브젝트에의 포인터를 돌려줍니다. 구조체에는 네트워크 서비스 데이타베이스 /etc/services 에 있는, 행의 내역 필드가 포함됩니다.

    struct  servent {
            char    *s_name;        /* 서비스의 오피셜명 */
            char    **s_aliases;    /* 앨리어스(alias) 리스트 */
            int     s_port;         /* 서비스가 상주하는 포트 */
            char    *s_proto;       /* 사용하는 프로토콜 */
    };

이 구조체의 멤버는 다음과 같습니다.

s_name
    서비스의 오피셜명.

s_aliases
    서비스의 별명 (앨리어스(alias))의 0 으로 끝나는 리스트.

s_port
    서비스가 존재하는 포트 번호. 포트 번호는 네트워크 바이트 오더로 돌려주어집니다.

s_proto
    서비스와의 컨택트중에 사용하는 프로토콜명.

getservent() 함수는, 파일의 다음의 행을 읽어들입니다. 그 때, 필요하면 파일을 오픈합니다.

setservent() 함수는 파일을 오픈해 되감기 합니다. stayopen 플래그가 0 이 아니면, getservbyname() 또는 getservbyport() 의 각 호출의 후에도, 넷 데이타베이스는 클로우즈 되지 않습니다.

endservent() 함수는 파일을 클로우즈 합니다.

getservbyname() 및 getservbyport() 함수는, 적합하는 프로토콜명 또는 포트 번호 (이것은 네트워크 바이트 오더로 지정되지 않으면 안됩니다) 하지만 발견되는지, 아주 없으면 EOF 에 이를 때까지, 파일을 최초부터 차례차례 검색합니다. 프로토콜명이 주어지고 있어도 ( NULL (이)가 아니어도), 검색은 적합하는 프로토콜이 발견될 때까지 계속됩니다.

관련 파일
/etc/services

진단
EOF 또는 에러의 경우, Null 포인터 (0) 하지만 돌아갑니다.

관련 항목
getprotoent(3), services(5)

역사
getservent(), getservbyport(), getservbyname(), setservent() 및 endservent() 함수는, 4.2BSD 그리고 등장했습니다.

버그
이러한 함수는 정적 데이터 기억역을 사용합니다. 다음에 이 데이터를 사용할 필요가 있으면, 이후의 이러한 함수 호출로 데이터가 덧쓰기되기 전에, 카피해 보존할 필요가 있습니다. 포트 번호가 모두 32 비트에 적합한다고 기대하는 것은, 아마 너무 소박합니다.