网络编程基础5-获得服务端信息getservent

/* 
1. 获得服务信息,   struct servent4个成员
2. getservent()函数顺序扫描服务数据库/etc/services,存储在静态结构体struct servent.
*/
#include <stdio.h>  
#include <stdlib.h>  
#include <netdb.h>  
#include <arpa/inet.h>    

int main()  
{  
    char **p = NULL;  
    struct servent *serv = NULL;  
    //setservent(1);  

    while( (serv = getservent()) != NULL )  
    {        
        printf("service name: %s\n", serv->s_name);           
        for(p = serv->s_aliases; *p != NULL; p++)  
        {  
            printf("alternate server name: %s\n", *p);  
        }         
        printf("port number: %d\n", ntohs(serv->s_port));    // Note: the port here is in network byte order.  
        //printf("port number: %x\n", serv->s_port);  

        printf("protocol: %s\n", serv->s_proto);  
        printf("\n");  
    }  
    //关闭文件
    endservent();  
    return 0;  
} 

这里写图片描述

#if 0
/* Description of data base entry for a single service.  */
struct servent
{
  char *s_name;         /* Official service name.  */
  char **s_aliases;     /* Alias list.  */
  int s_port;                   /* Port number.  */
  char *s_proto;            /* Protocol to use.  */
};
/* Description of data base entry for a single service.  */
struct servent
{
  char *s_name;         /* Official service name.  */
  char **s_aliases;     /* Alias list.  */
  int s_port;           /* Port number.  */
  char *s_proto;        /* Protocol to use.  */
};

/* Open service data base files and mark them as staying open even
   after a later search if STAY_OPEN is non-zero.

   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern void setservent (int __stay_open);

/* Close service data base files and clear `stay open' flag.

   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern void endservent (void);

/* Get next entry from service data base file.  Open data base if
   necessary.

   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern struct servent *getservent (void);

/* Return entry from network data base for network with NAME and
   protocol PROTO.

   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern struct servent *getservbyname (__const char *__name,
                      __const char *__proto);

/* Return entry from service data base which matches port PORT and
   protocol PROTO.

   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern struct servent *getservbyport (int __port, __const char *__proto);
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值