Как зациклить функцию getprotent()
Я верю getprotoent()
функция получает значения от /etc/protocols
,
Я сделал следующий пример программы: test.c.
Это показывает
proto.p_name = ip
* proto.p_aliases = IP
proto.p_proto = 0
Эти значения совпадают с первой записью в /etc/protocols
,
Я хочу знать, как я могу получить значения 2-х записей, как зацикливание с оценкой некоторых указателей, не используя getprotobyname()
или же getprotobynumber()
,
test.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();
}
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);
}