gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:20:57 24 4
gpt4 key购买 nike

我正在尝试使用 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

我还尝试了此文件中提供的其他服务,但没有任何效果,我总是收到找不到此服务的条目。

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

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

最佳答案

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

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

但是您在代码中交换了服务名称和原型(prototype):

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

关于c - 如何让 getservbyname() C 库调用在 Mac 上正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55066847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com