最近由于项目需要实现修改文件的功能,所以,博主认真查阅了一些资料,但是,很遗憾,并没有太多的 收获。
好的,首先我先叙述下功能要求:
其实很简单,就是Shell中sed命令的C语言实现,实 现定位到所需要的字段的那一行,之后修改成需要的内容。但是由于C语言是面向过程的语言,需要顺序执行 的特点,所以,实现中遇到了很多麻烦,在这里博主将实现的过程描述如下,以便大家参考。
问题描 述:
文本内容:
wireless.1.authmode=1 wireless.1.compression=0 wireless.1.current_ap=ssid12 wireless.1.current_state=1 wireless.1.devname=ath0 wireless.1.enable_slave1_status=disabled wireless.1.enable_slave2_status=disabled wireless.1.enable_slave3_status=disabled
我需要做的就是修改第四行的内容,使之变为:
wireless.1.current_state=0
问题看似简单,实现过程颇费周折。。。
这里我给出实 现的代码,注释已经加在代码中:
/* * Author:DLUTBruceZhang * Date: 2013.06.24 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> int main() { /* *linebuffer:读取文件中的一行存入的缓冲 *buffer1:一行中第一个字段的存入缓冲 *buffer2:一行中第二个字段的存入缓冲 */ char linebuffer[512] = {0}; char buffer1[512] = {0}; char buffer2[512] = {0}; int line_len = 0; int len = 0; int res; /* * cc.cfg是文件名,r+代表可以读写文件 */ FILE *fp = fopen("cc.cfg", "r+"); if(fp == NULL) { printf("open error"); return -1; } while(fgets(linebuffer, 512, fp)) { line_len = strlen(linebuffer); len += line_len; /* * buffer1=wireless.1.current_state * buffer2=1 */ sscanf(linebuffer, "%[^=]=%[^=]", buffer1,buffer2); if(!strcmp("wireless.1.current_state", buffer1)) { /* * 由于已经找到所需要写的位置,所以需要写位置的“头” */ len -= strlen(linebuffer); /* * 实现文件位置的偏移,为写文件做准备 */ res = fseek(fp, len, SEEK_SET); if(res < 0) { perror("fseek"); return -1; } strcpy(buffer2, "=0"); /*strcat(buffer1, "=");*/ strcat(buffer1, buffer2); printf("%d",strlen(buffer1)); /* * 写文件,存入所需的内容 */ fprintf(fp, "%s", buffer1); fclose(fp); return; } } return 0; }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, include
, c语言程序修改
, buffer
, wireless
, 字段
, 一行
特定行
c语言实现文本编辑器、c语言 截取特定字符串、editplus提取特定文本、批量提取txt特定文本、易语言取特定文本,以便于您获取更多的相关知识。