вам нужен MAC-адрес, который не просто строка, это ровно 6 байтов. Возвращаемое значение равно 0 в случае успеха и 1 в противном случае. Параметр функции - это выходной буфер, который вы размещаете (скорее всего статически) снаружи.

вопрос точно так же, как этот вопрос:Как получить MAC-адрес вашего компьютера с помощью программы на C?

«Я работаю над Ubuntu. Как я могу получить MAC-адрес своего компьютера или интерфейс, скажем, eth0, используя программу на Си».

Я обычно не прикасаюсь к С ... но в этом случае я должен. Поскольку я действительно не знаю, что происходит в следующем коде, который был взят из ответа, приведенного выше, мне нужна помощь.

#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-адрес, мне нужна функция, которая возвращает его в виде строки. Вы знаете, как это:

const char * gettaStringFromNativeCode(void) 
{
    return "This is a string";
}

Это должно быть использовано сMozilla Chromeless, который использует новые JCTYPES Firefox, какэто.

По сути, я хочу сделать что-то вроде этого (заимствование из 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;
}

Ответы на вопрос(2)

Ваш ответ на вопрос