我正在尝试使用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
中使用,如下所示:
我也尝试了这个文件中提供的其他服务,但没有任何工作,总是我得到No entry found for this service.
我正在使用gcc在Mac OS Mojave上编译代码。
我做错了什么以及如何解决?
你不小心互换了参数的顺序。手册页说:
struct servent *getservbyname(const char *name, const char *proto);
但是您在代码中交换了服务名称和proto:
struct servent *sptr = getservbyname("tcp", "exonet");