如何让getservbyname()C库调用在Mac上正常工作?

问题描述 投票:0回答:1

我正在尝试使用getservbyname() C库调用,我正在使用它:

#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  struct servent *sptr = getservbyname("tcp", "exonet");

  if (!sptr)
  {
    printf("No entry found for this service.\n");
    exit(1);
  }

  printf("service name is %s.\n"
         "service port is %d.\n"
         "protocol to use is %s.\n",
         sptr->s_name, sptr->s_port, sptr->s_proto);

  return 0;
}

该函数无法找到服务条目,而它在/etc/services文件中可用,并且此函数应该从此处获取。

服务exonet可在/etc/services中使用,如下所示:

enter image description here

我也尝试了这个文件中提供的其他服务,但没有任何工作,总是我得到No entry found for this service.

我正在使用gcc在Mac OS Mojave上编译代码。

我做错了什么以及如何解决?

c
1个回答
0
投票

你不小心互换了参数的顺序。手册页说:

struct servent *getservbyname(const char *name, const char *proto);

但是您在代码中交换了服务名称和proto:

struct servent *sptr = getservbyname("tcp", "exonet");
© www.soinside.com 2019 - 2024. All rights reserved.