#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
int main(int argc, char *argv[])
{
int chars_read;
char buf[BUFSIZ];
FILE* fd = popen("route | grep 'default' | awk '{print $2}' ", "r");
if (fd == NULL)
{
perror("get getway error\n");
return -1;
}
memset( buf, 0, BUFSIZ );
//fgets(buf, sizeof(buf), fd);
chars_read = fread(buf, sizeof(char), BUFSIZ-1, fd);
printf("the netmask is %s",buf);
//free(buf);
}
//////////////////////////////////////////////
方法二:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
//#include <net/if.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <linux/ethtool.h>
#include <linux/sockios.h>
#include <linux/route.h>
int getWanGateway(char *gateway)
{
char buff[256];
int nl = 0;
struct in_addr dest;
struct in_addr gw;
int flgs, ref, use, metric;
unsigned long int d, g, m;
int find_default_flag = 0;
char sgw[16];
FILE *fp = fopen("/proc/net/route", "r");
while (fgets(buff, sizeof (buff), fp) != NULL)
{
if (nl)
{
int ifl = 0;
while (buff[ifl] != ' ' && buff[ifl] != '\t' && buff[ifl] != '\0')
ifl++;
buff[ifl] = 0; /* interface */
if (sscanf(buff + ifl + 1, "%lx%lx%X%d%d%d%lx",
&d, &g, &flgs, &ref, &use, &metric, &m) != 7)
{
fclose(fp);
return -1;
}
if (flgs & RTF_UP)
{
dest.s_addr = d;
gw.s_addr = g;
strcpy(sgw, (gw.s_addr == 0 ? "" : (char *) inet_ntoa(gw)));
if (dest.s_addr == 0)
{
find_default_flag = 1;
memcpy(gateway, sgw, strlen(sgw));
printf("gateway:%s\n", gateway);
//printf("gateway:%s", gateway);
break;
}
}
}
nl++;
}
fclose(fp);
if (find_default_flag == 1)
return 0;
else
return -1;
}
int main(int argc, char *argv[])
{
//int getWanGateway(char *gateway);
char gateway[100];
getWanGateway(gateway);
return 0;
}