用代码获得/etc/resolv.conf文件的最后修改时间和文件内信息

/etc/resolv.conf

文件是DNS域名解析的配置文件,每行以一个关键字开头,后接配置参数。resolv.conf的关键字主要有四个,分别是:
nameserver   #定义DNS服务器的IP地址
domain       #定义本地域名
search       #定义域名的搜索列表
sortlist     #对返回的域名进行排序

最主要是nameserver关键字,如果没指定nameserver就找不到DNS服务器,其它关键字是可选的。

我的ubuntu 12.04 resolv.conf文件如下:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search www.google.com google.com

用代码获得/etc/resolv.conf文件的最后修改时间和文件内信息,如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#define RESOLV_CONF_PATH    "/etc/resolv.conf"
#define MAX_DNS_SERVERS     2
#define MAX_NET_STR_LEN     256

typedef struct dns_info_s {
    char dns_svr[MAX_DNS_SERVERS][MAX_NET_STR_LEN];
    char domain[MAX_NET_STR_LEN];
} dns_info_t;

time_t net_get_dns_info_mtime(void);
int net_get_dns_info(dns_info_t *dns_info);

time_t net_get_dns_info_mtime(void)
{
	const char *file = RESOLV_CONF_PATH;
	struct stat stat_buf;

	if (stat(RESOLV_CONF_PATH, &stat_buf) < 0) {
		if (errno == ENOENT)
			printf("%s has been removed!\n", RESOLV_CONF_PATH);
		else {
			printf("stat(%s)\n", file);
			return 0;
		}
	}
	printf("%s: st_mtime=0x%08X\n", file, (int)stat_buf.st_mtime);
	return stat_buf.st_mtime;
}

int net_get_dns_info(dns_info_t *dns_info)
{
	FILE *file;
	int ret, i, svr_cnt, df;
	char name[16], domain[128];

	file = fopen(RESOLV_CONF_PATH, "r");
	if (!file) {
		printf("fopen fail = %s(%d)\n", strerror(errno), errno);
		return -errno;
	}

	i = svr_cnt = df = 0;
	while ((ret = fscanf(file, "%s %s", name, domain)) != EOF) {
		if (ret < 2) {
			printf("fscanf ret=%d\n", ret);
			ret = -1;
			break;
		}

		if (svr_cnt < MAX_DNS_SERVERS && !strcmp(name, "nameserver")) {
			strcpy(dns_info->dns_svr[svr_cnt++], domain);
			printf("dns_svr=%s\n", domain);
		}
		else if (!strcmp(name, "search")) {
			strcpy(dns_info->domain, domain);
			printf("domain=%s\n", domain);
			df++;
		}
	}

	fclose(file);

	printf("svr_cnt=%d, df=%d\n", svr_cnt, df);

	if (svr_cnt && df)
		ret = 0;
	else
		ret = -1;
	return ret;
}

int main(void)
{
	int ret;
	dns_info_t dns_info;
	time_t mtime;
	mtime = net_get_dns_info_mtime();

	printf("time = %ld\n",mtime); //time_t st_mtime; 文件内容最后被修改的时间

	if ((ret = net_get_dns_info(&dns_info)) < 0)
	{
		printf("Getting DNS Info error\n");
	}

	return 0;
}

编译运行:

zx@zx:~$ gcc main.c 
zx@zx:~$ ./a.out 
/etc/resolv.conf: st_mtime=0x5195A7A8
time = 1368762280
dns_svr=127.0.0.1
domain=www.google.com
fscanf ret=1
svr_cnt=1, df=1




猜你喜欢

转载自blog.csdn.net/zhangxu1024/article/details/8939734