A.01.0067-V4345-DEBUG Type:DEBUG Version:4345 我的/etc/rr-info文件内容如此,帮我写一个C语言函数,根据传参获得对应内容,例如传"Version"就返回字符串"4345"
时间: 2024-09-07 15:01:51 浏览: 80
为了根据传参获得文件`/etc/rr-info`中的特定内容,比如“Version”,我们可以编写一个C语言函数,该函数读取文件内容,解析并返回所请求的部分。以下是一个简单的示例函数,它假设文件格式是固定的,并且每个部分的名称后面都紧跟着一个冒号和值,且值之间通过空格分隔。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个结构体来保存键值对
typedef struct {
char *key;
char *value;
} KeyValue;
// 函数声明
char* get_info_from_file(const char* filename, const char* key);
int main() {
const char* filename = "/etc/rr-info";
const char* key = "Version";
// 调用函数并打印结果
char* value = get_info_from_file(filename, key);
if (value) {
printf("The value for key '%s' is: %s\n", key, value);
free(value); // 释放分配的内存
} else {
printf("Key '%s' not found in file.\n", key);
}
return 0;
}
// 函数定义
char* get_info_from_file(const char* filename, const char* key) {
FILE* file = fopen(filename, "r");
if (!file) {
perror("Error opening file");
return NULL;
}
char line[256];
char* result = NULL;
KeyValue kv;
kv.key = NULL;
kv.value = NULL;
// 逐行读取文件
while (fgets(line, sizeof(line), file)) {
// 分割键和值
char* delimiter = ":";
char* token = strtok(line, delimiter);
if (token != NULL) {
kv.key = token;
token = strtok(NULL, delimiter);
if (token != NULL) {
kv.value = token;
}
}
// 检查是否找到所需键
if (kv.key != NULL && strcmp(kv.key, key) == 0) {
if (kv.value != NULL) {
result = strdup(kv.value); // 复制值字符串
}
break;
}
}
fclose(file); // 关闭文件
return result; // 返回找到的值,如果没有找到则返回NULL
}
```
请注意,这个函数使用了`strdup`来分配内存,因此调用者需要负责释放这块内存。在实际应用中,你可能需要更健壮的解析逻辑,以处理不规则的格式、空值或文件不存在的情况。
阅读全文