【问题标题】:How to loop getprotent() function如何循环getprotent()函数
【发布时间】:2013-12-18 00:25:09
【问题描述】:

我相信getprotoent() 函数从/etc/protocols 获取值。

我做了以下示例程序:test.c.

显示

proto.p_name = ip
*proto.p_aliases = IP
proto.p_proto = 0

这些值与/etc/protocols 中的第一个条目相同。

我想知道如何获取第二个条目的值,例如循环评估一些不使用getprotobyname()getprotobynumber() 的指针。

测试.c

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

int main(int argc,char *argv[])
{
    protEnt();
}

int protEnt()
{
    setprotoent(2);
    struct protoent proto;
    proto = *getprotoent();
    printf("proto.p_name      = %s\n",proto.p_name);
    printf("*proto.p_aliases  = %s\n",*proto.p_aliases);
    printf("proto.p_proto     = %d\n",proto.p_proto);
    proto = *getprotoent();
    endprotoent();
}

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    您可以一遍又一遍地调用getprotoent(),并在每次调用时获取下一个条目。您只需检查它是否有NULL,这意味着没有留下任何条目。这意味着您需要将您的 proto 变量更改为指针。

    所以是这样的:

    struct protoent *proto;
    while((proto = getprotoent()) != NULL)
    {
            printf("proto.p_name      = %s\n",(*proto).p_name);
            printf("*proto.p_aliases  = %s\n",*(*proto).p_aliases);
            printf("proto.p_proto     = %d\n",(*proto).p_proto);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      相关资源
      最近更新 更多