readfile.c

来自「用c语言实现读取配置文件. 书写比较规范」· C语言 代码 · 共 58 行

C
58
字号
/************************************************************************************
*description: 用c语言实现读取配置文件
*author: bolin.gong
**********************************************************************************/

#include <stdio.h>
#include <string.h>
#include <assert.h>

#define CONFIG_LINE_SIZE? ?? ?255

/*
** legal format of configure file entry
**
** key = value<\n>
*/

int f_read_config(FILE *fp, const char * str, char *val, size_t val_len) {
? ? ? ? char buffer[CONFIG_LINE_SIZE + 1];
? ? ? ? char *ptr;
? ? ? ? size_t buflen;
? ? ? ? size_t len;

? ? ? ? assert(fp != NULL);
? ? ? ? assert(str != NULL);
? ? ? ? assert(val != NULL);

? ? ? ? while (!feof(fp)) {
? ? ? ? ? ? ? ? if (fgets(buffer, sizeof(buffer), fp) == NULL) {
? ? ? ? ? ? ? ? ? ? ? ? if (ferror(fp)) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return -1; /* error: file io error */
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? break; /* end of file */
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? buflen = strlen(buffer) - 1;
? ? ? ? ? ? ? ? if (buffer[buflen] != '\n') {
? ? ? ? ? ? ? ? ? ? ? ? return -2; /* error: line size too small */
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? buffer[buflen] = '\0';
? ? ? ? ? ? ? ? len = strlen(str);
? ? ? ? ? ? ? ? if (len + 3 >= buflen) {
? ? ? ? ? ? ? ? ? ? ? ? return -3; /* error: invalid format */
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ptr = buffer;
? ? ? ? ? ? ? ? if (strncmp(ptr, str, len) == 0) {
? ? ? ? ? ? ? ? ? ? ? ? ptr += len;
? ? ? ? ? ? ? ? ? ? ? ? if (strncmp(ptr, " = ", 3) != 0) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return -3; /* error: invalid format */
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ptr += 3;
? ? ? ? ? ? ? ? ? ? ? ? if (strlen(ptr) > val_len) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return -4; /* error: value buffer too small */
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? strncpy(val, ptr, val_len);
? ? ? ? ? ? ? ? ? ? ? ? return 1; /* found */
? ? ? ? ? ? ? ? }
? ? ? ? }
? ? return 0; /* not found */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?