KDK_NC_GET_PHYMAC(3)
💖 KDK_NC_GET_PHYMAC — Library Functions Manual, bestie edition 🎀
okay so like. hi. you're reading the manual page for kdk_nc_get_phymac from the Library Functions Manual and honestly? it's giving "get a NIC's MAC address" and I'm obsessed. let's get into it 💅
✨ NAME ✨
kdk_nc_get_phymac — 获取指定网卡的物理MAC地址
(yes bestie the original is in Chinese and I am NOT touching it, that's the actual name of the thing, periodt 🫶)
🌸 SYNOPSIS 🌸
#include <libkync.h>
extern char* kdk_nc_get_phymac(const char *nc);
Link with -lkyhw.
not me reminding you to link with -lkyhw because if you forget you WILL be crying at undefined references 😭
🦋 Detailed Description 🦋
The main function of the interface is to obtain the physical MAC address of the specified NIC nc.
The argument nc is the name of the NIC, such as "eno1". Like, the string name. Not the card object, not a pointer to the card, just the name. lowercase energy. "eno1". you got this.
👑 RETURN VALUE 👑
On success, returns a physical MAC address of type char*, generated by alloc, which should be free; If the specified NIC does not exist, NULL is returned.
On error, return NULL.
🚨 bestie listen. it was alloc'd. that means YOU free it. if you don't free it that's a leak and the vibe check has been failed. fr fr.
🎀 EXAMPLES 🎀
here's the whole example, copy-paste-able, iconic, no notes:
#include "libkync.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
char **cards = kdk_nc_get_cardlist();
size_t index = 0;
printf("所有网卡:\n");
while (cards[index])
{
char *mac = kdk_nc_get_phymac(cards[index]);
char *ipv4 = kdk_nc_get_private_ipv4(cards[index]);
char *ipv6 = kdk_nc_get_private_ipv6(cards[index]);
char *driver = kdk_nc_get_driver(cards[index]);
char vendor[256] = " ", product[256] = " ";
kdk_nc_get_vendor_and_product(cards[index], vendor, product);
printf("Card %zd: %sStatus: %sMac: %sIPv4: %sIPv6: %s Vendor: %s Product: %s Type: %s driver: %s\n",
index + 1, cards[index], kdk_nc_is_up(cards[index]) == 1 ? "Up" : "Down",
mac, ipv4, ipv6, vendor, product,
kdk_nc_is_wireless(cards[index]) ? "wireless" : "ethernet", driver);
char **list4 = kdk_nc_get_ipv4(cards[index]);
int i = 0;
printf("AllIpV4: ");
while (list4 && list4[i])
{
printf("%s", list4[i++]);
}
printf("\n");
char **list6 = kdk_nc_get_ipv6(cards[index]);
printf("AllIpV6: ");
i = 0;
while (list6 && list6[i])
{
printf("%s", list6[i++]);
}
printf("\n");
free(mac);
free(ipv4);
free(ipv6);
free(list4);
free(list6);
free(driver);
index++;
}
kdk_nc_freeall(cards);
char **upcards = kdk_nc_get_upcards();
index = 0;
printf("工作网卡:\n");
while (upcards[index])
{
printf("Card %zd: %s\n", index + 1, upcards[index]);
index++;
}
kdk_nc_freeall(upcards);
return 0;
}
see how it frees mac? see how it frees ipv4, ipv6, list4, list6, driver? and then kdk_nc_freeall(cards) and kdk_nc_freeall(upcards)?? that's the whole point bestie, the example is eating and leaving no crumbs 🔥
💜 CONFORMING TO 💜
These functions are as per the withdrawn POSIX.1e draft specification.
The following functions are Linux extensions: kdk_nc_is_up(), kdk_nc_get_upcards(), kdk_nc_get_cardlist(), kdk_nc_get_private_ipv4(), kdk_nc_get_ipv4(), kdk_nc_get_private_ipv6(), kdk_nc_get_ipv6(), kdk_nc_is_wireless(), kdk_nc_get_vendor_and_product(), kdk_nc_get_driver(), and kdk_nc_freeall().
"withdrawn POSIX.1e draft" — yeah. it's giving vintage. it's giving heritage. the extension squad is Linux-only, so don't go porting this to your weird OS and then @ me about it 🙈
🌈 SEE ALSO 🌈
kdk_nc_is_up(3)kdk_nc_get_upcards(3)kdk_nc_get_cardlist(3)kdk_nc_get_private_ipv4(3)kdk_nc_get_ipv4(3)kdk_nc_get_private_ipv6(3)kdk_nc_get_ipv6(3)kdk_nc_is_wireless(3)kdk_nc_get_vendor_and_product(3)kdk_nc_get_driver(3)- and
kdk_nc_freeall(3)
like the whole friend group. go read them too, they're all part of the same era 💖
and that's the page!! this one came out of the Linux Programmer's Manual, dated Fri Aug 25 2023 — so if you're citing it, that's the version, that's the date, mwah 💅✨ go free your strings bestie, ily, bye 🦋
📦 where this page comes from
- arch rolling: libkysdk-system 3.0.1.4-1 · LGPL-3.0-or-later AND LGPL-2.1-only OR LGPL-3.0-only AND LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LGPL-3.0-only WITH Qt-LGPL-exception-1.1 AND MIT
- ubuntu resolute: libkysdk-system-dev 3.0.1.2-0ubuntu1 · LGPL-3.0-only
- ubuntu stonking: libkysdk-system-dev 3.0.1.3-0ubuntu1 · LGPL-3.0-or-later
- 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms