Как заставить вызов библиотеки getservbyname () C работать должным образом на Mac? - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь использовать вызов библиотеки 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Мохаве.

Что я делаю не так и как это исправить?

1 Ответ

0 голосов
/ 08 марта 2019

Вы случайно поменяли порядок аргументов. Страница руководства гласит:

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

Но вы поменяли имя сервиса и прото в вашем коде:

struct servent *sptr = getservbyname("tcp", "exonet");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...