Этот вопрос точно такой же, как этот вопрос: Как получить MAC-адрес вашего компьютера с помощью программы на C?
"Я работаю в Ubuntu. Как я могу получить MAC-адресмоя машина или интерфейс говорят «eth0» с помощью программы на языке Си. "
Теперь я обычно не касаюсь C ... но в этом случае я должен.Поскольку я действительно не знаю, что происходит в следующем коде, который был взят из ответа, приведенного выше, мне нужна помощь.
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/if.h>
#include <netdb.h>
#include <stdio.h>
int main()
{
struct ifreq s;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
strcpy(s.ifr_name, "eth0");
if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) {
int i;
for (i = 0; i < 6; ++i)
printf(" %02x", (unsigned char) s.ifr_addr.sa_data[i]);
puts("\n");
return 0;
}
return 1;
}
Вместо функции, которая печатает MAC-адрес Iнужна функция, которая возвращает его в виде строки.Вы знаете, как это:
const char * gettaStringFromNativeCode(void)
{
return "This is a string";
}
Это должно использоваться с Mozilla Chromeless , который использует новые JCTYPES Firefox, такие как this .
По сути, я хочу сделать что-то вроде этого (заимствуя из C #):
// Using "string" here because its pseudo-code and I don't know what i'm doing. :-)
string getMAC()
{
struct ifreq s;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
strcpy(s.ifr_name, "eth0");
var macAddress = string.Empty; // yah, this is actually C#
if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) {
int i;
for (i = 0; i < 6; ++i)
// yah, this is a bit of C# too.
macAddress += string.Format(" %02x", (unsigned char) s.ifr_addr.sa_data[i]) );
}
return macAddress;
}