关于getservbyname的正确答案是什么?

时间:2018-01-29 01:07:06

标签: c linux sockets

我不知道关于getservbyname的正确答案是什么。

句子sp = getservbyname("example", "tcp")

一个。客户端使用它来获取服务的端口。

湾只有在我们有权修改/ etc / services文件时才能使用。

℃。如果我们有权访问/ etc / services,服务器将使用它来获取服务的端口。

d。 a y b是正确的。

非常感谢!

1 个答案:

答案 0 :(得分:2)

首次订购的所有可能性都是错误的。这是一个糟糕的考试问题,你可以告诉你的导师我这么说。

(a)是最错误的答案。在给定文本服务名称的情况下,通用TCP客户端可以使用getservbyname 来确定要连接的服务器的端口。但是,它还有其他一些用途,而且它也已经过时了:新程序应该使用getaddrinfo(同时执行getservbyname的工作和gethostbyname&# 39;工作,同时,更灵活)。

(b)完全错误。 getservbyname 可能要求读取 /etc/services的访问权限,具体取决于Name Service Switch的配置方式;在任何情况下都不需要访问该文件。 (/etc/services的内容由IANA service name and port number registry定义,现在应该修改该文件的唯一程序是sysadmin的文本编辑器和OS的包管理器。不记得是否曾经有一个C库接口来更新该文件,但如果它存在,它将比getservbyname更加过时。)

(c)部分错误;服务器可以合理地使用getservbyname来查找它应该绑定到的端口,但是,如上所述,它最多需要读取访问权限到/etc/services这样做。 (说"允许修改"在选项(b)中然后只是"访问"在(c)中是草率的问题写作技术。)

(d)错误,因为(b)错误。