ゼロ埋め込みなしで印刷されるimplementationは、の代わりに%x
を使用すると、printf
です。 struct ether_addr
の形式はdocumented in the man pageなので、その内部はプライベートではありません。
The structure ether_addr is defined in <net/ethernet.h> as:
struct ether_addr {
uint8_t ether_addr_octet[6];
}
私は独自のバージョンを実装します。 rz
は、ここではリエントラントで0を意味します。
char *ether_ntoa_rz(const struct ether_addr *addr, char *buf)
{
sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
addr->ether_addr_octet[0], addr->ether_addr_octet[1],
addr->ether_addr_octet[2], addr->ether_addr_octet[3],
addr->ether_addr_octet[4], addr->ether_addr_octet[5]);
return buf;
}
リエントラントでないバージョンでは、静的バッファがあり、リエントラントなものを呼び出すだけです。
char *ether_ntoa_z(const struct ether_addr *addr)
{
static char buf[18]; /* 12 digits + 5 colons + null terminator */
return ether_ntoa_rz(addr, buf);
}
あなたはglibcの中で関数の実装を見たい場合は
、あなたは
find it if you searchをすることができます。
ether_addrメンバーを選んでMACアドレスの各バイトを個別に印刷することができますね。 –
はい、私はそれらを印刷することができますが、私はどのように文字列に格納するのですか? – cftmon