gpt4 book ai didi

c - Getservent() 未从 _PATH_SERVICES 读取

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

我必须使用 getservbyname() 函数获取有关服务的信息,我已经检查过 _PATH_SERVICES 引用了服务数据库文件的“/etc/services”,但是当我尝试打印返回的信息端口号时,端口号是另一个端口号。

这是我的代码:

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

void foo(){
//netdb.h is in /usr/include
//CHECK: is not reading from /etc/services
FILE * f;
f = fopen("/etc/services", "r");
char buffer[50000];
int index = 0;
//just try
while(index < 1000){
buffer[index++] = fgetc(f);
}
printf("%s", buffer); //printed buffer corresponds to /etc/services contents
struct servent * serv;
serv = getservbyname("ftp", "tcp");
printf("Service name: %s\n", serv->s_name);
printf("Service port: %u\n", serv->s_port); //it would be 21, instead is 5376
printf("Service protocol: %s\n", serv->s_proto);
}


int main(void){
printf("Reading services from: %s\n", _PATH_SERVICES); //it returns "/etc/services"
foo();
return 0;
}

getservbyname()使用getservent(),而getservent()从_PATH_SERVICES路径读取,是否有可能不是从_PATH_SERVICES读取?

谢谢大家!

最佳答案

您需要使用 ntohs(serv->s_port) 函数调用将网络字节顺序转换为主机字节顺序。

printf("服务端口:%u\n", ntohs(serv->s_port));

关于c - Getservent() 未从 _PATH_SERVICES 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29182947/

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