#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
#define IFCFG_ETH0 "/etc/sysconfig/network-scripts/ifcfg-eth0"
#define IFCFG_LO "/etc/sysconfig/network-scripts/ifcfg-lo"
#define IFCFG_WLAN0 "/etc/sysconfig/network-scripts/ifcfg-wlan0"
#define HWADDR_LINE 7
#define MAXLINE 64
void inc_mac(char hwaddr[18]);
int main(int argc, char **argv)
{
int i;
char buf[MAXLINE] = {0};
char hwaddr[MAXLINE] = {0};
//get eth0 info and read the line :HWADDR=*****
FILE *fp_ifcfg_eth0 = fopen(IFCFG_ETH0, "r");
for(i = 1;i <= HWADDR_LINE;i++)
fgets(buf, MAXLINE-1, fp_ifcfg_eth0);
//fgets函数遇到换行符时会将其读进缓冲区中,也就所遇到换行符停止
buf[strlen(buf)-1] = '\0';
strncpy(hwaddr, buf+7, strlen(buf)-7);
cout << "Now mac = " << hwaddr << endl;
inc_mac(hwaddr); // mac + 1
cout << "mac + 1 = " << hwaddr << endl;
exit(0);
}
void inc_mac(char hwaddr[18])
{
int i, m = 4, n, conunt = 0;
for(i = 16;i >= 0;i--)
{
//skip ':'
if(i == 2 + 3*m)
{ m--; continue; }
//addr[i]++
if(hwaddr[i] == '9')
{ hwaddr[i] = 'A'; break; }
else if(hwaddr[i] == 'F')
{ hwaddr[i] = '0'; }
else
{ hwaddr[i]++; break; }
}
}