rm-sensors->main.c->read_config_file

static int read_config_file(const char *config_file_name)
{
	FILE *config_file;
	int err;

	if (config_file_name) {
		if (!strcmp(config_file_name, "-"))
			config_file = stdin;
		else
			config_file = fopen(config_file_name, "r");

		if (!config_file) {
			fprintf(stderr, "Could not open config file\n");
			perror(config_file_name);
			return 1;
		}
	} else {
		/* Use libsensors default */
		config_file = NULL;
	}

	err = sensors_init(config_file);
	if (err) {
		fprintf(stderr, "sensors_init: %s\n", sensors_strerror(err));
		if (config_file)
			fclose(config_file);
		return 1;
	}

	if (config_file && fclose(config_file) == EOF)
		perror(config_file_name);

	return 0;
}

以下是read_config_file函数的源码。它以一个FILE*调用了sensors_init函数,而这个函数很明显是自己定义的,(这里说很明显的意思是,我也不确定,再也不想犯之前的错误,说什么分析setlocale函数的源码了(不是不可能而没意义)。之前和之后的错误查检真是太丰富了。但这不是主题,如果想看人家的设计理念和编程机巧那么从这些可以看到很多,但现在我的注意力只在于这个功能是怎么实现的。之于像sensors_strerror()这样的函数,可以不会再分析了。下面看看sensors_init()函数。

 

int sensors_init(FILE *input)
{
	int res;

	if (!sensors_init_sysfs())
		return -SENSORS_ERR_KERNEL;
	if ((res = sensors_read_sysfs_bus()) ||
	    (res = sensors_read_sysfs_chips()))
		goto exit_cleanup;

	if (input) {
		res = parse_config(input, NULL);
		if (res)
			goto exit_cleanup;
	} else {
		const char* name;

		/* No configuration provided, use default */
		input = fopen(name = DEFAULT_CONFIG_FILE, "r");
		if (!input && errno == ENOENT)
			input = fopen(name = ALT_CONFIG_FILE, "r");
		if (input) {
			res = parse_config(input, name);
			fclose(input);
			if (res)
				goto exit_cleanup;

		} else if (errno != ENOENT) {
			sensors_parse_error_wfn(strerror(errno), name, 0);
			res = -SENSORS_ERR_PARSE;
			goto exit_cleanup;
		}

		/* Also check for files in default directory */
		res = add_config_from_dir(DEFAULT_CONFIG_DIR);
		if (res)
			goto exit_cleanup;
	}

	return 0;

exit_cleanup:
	sensors_cleanup();
	return res;
}

我会一如既往的尽可能短的找到它在一般正常的情况下,调用的函数,和所作的本质工作。比如这个函数,它只是以正确的参数调用parse_config()函数,从文中可以看出这个函数的参数一个是FILE*另一个是字符串。至到这里

转载于:https://my.oschina.net/u/2418118/blog/914088

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值