Linux関数--inet_pton/inet_ntop
3835 ワード
inet_ptonとinet_ntop
Linuxの下の2つのIPアドレス変換関数は、IPアドレスを「ポイント10進数」と「整数」の間で変換することができ、inet_ptonとinet_ntopの2つの関数はipv 4とipv 6を処理することができる.比較的新しい関数です.
inet_pton
関数のプロトタイプは次のとおりです[[ポイントを10進数に分割]->[整数]#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
// , af , dst
inet_ptonはinet_addrの拡張、サポートされているマルチアドレスファミリーは、af=AF_INET srcは、文字型を指すアドレス、すなわちASCIIのアドレスの先頭アドレス(ddd.ddd.ddd.ddd.dddフォーマット)であり、関数は、そのアドレスをin_に変換するaddrの構造体を*dstにコピーしてaf=AF_INET 6 srcはIPV 6を指すアドレスであり、関数はこのアドレスをin 6_に変換するaddrの構造体を*dstにコピーします.関数エラーが負の値を返し、errnoがEAFNOSUPPORTに設定されている場合、パラメータafで指定されたアドレスファミリーとsrcフォーマットが間違っている場合、関数は0を返します.
inet_ntop
関数のプロトタイプは次のとおりです[[ポイントを10進数に分割]->[整数]#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
// ASCII , , socklen_t cnt,
// dst , , , , errno ENOSPC
プログラミングの例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main (void)
{
char IPdotdec[20]; // IP
struct in_addr s; // IPv4
// IP
printf("Please input IP address: ");
scanf("%s", &IPdotdec);
//
inet_pton(AF_INET, IPdotdec, (void *)&s);
printf("inet_pton: 0x%x
", s.s_addr); //
//
inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
printf("inet_ntop: %s
", IPdotdec);
}
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
// , af , dst
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
// ASCII , , socklen_t cnt,
// dst , , , , errno ENOSPC
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main (void)
{
char IPdotdec[20]; // IP
struct in_addr s; // IPv4
// IP
printf("Please input IP address: ");
scanf("%s", &IPdotdec);
//
inet_pton(AF_INET, IPdotdec, (void *)&s);
printf("inet_pton: 0x%x
", s.s_addr); //
//
inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
printf("inet_ntop: %s
", IPdotdec);
}