麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

C語言實現修改文本文件中特定行的實現代碼

2020-01-26 16:01:02
字體:
來源:轉載
供稿:網友

好的,首先我先敘述下功能要求:
其實很簡單,就是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;
}

保存文件名為:my_sed.c

運行效果如下:

我們再來看文件中的內容已經變為:

復制代碼 代碼如下:

wireless.1.authmode=1
wireless.1.compression=0
wireless.1.current_ap=ssid12
wireless.1.current_state=0
wireless.1.enable_slave1_status=disabled
wireless.1.enable_slave2_status=disabled
wireless.1.enable_slave3_status=disabled


實現原理:

這里實現的效率比較高,因為不是把整個文件的內容裝入緩沖區中,而是一行一行的讀取,知道匹配為止,之后利用寫文件的特性,直接覆蓋所寫內容即可,由此完成所需功能

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 色视频91 | 国产一区免费在线 | 国产 视频 一区二区 | 成人午夜免费观看 | 欧美视频99 | 宅男噜噜噜66一区二区 | av电影在线观看免费 | 色柚视频网站ww色 | 久久久国产精品免费观看 | 极品大长腿啪啪高潮露脸 | av电影网站在线观看 | 成人性爱视频在线观看 | 国产美女的小嫩bbb图片 | 午夜视频观看 | 亚洲国产在 | 国产高潮失禁喷水爽到抽搐视频 | 亚洲福利在线免费观看 | xnxx 日本免费 | av日韩一区二区三区 | 欧美精品 | 成人国产综合 | 欧美成人一区二区视频 | 操碰在线视频 | 国产精品视频在线观看免费 | 色婷婷久久一区二区 | 超碰97国产在线 | 国产无限资源在线观看 | 国产成人自拍视频在线 | 欧美人一级淫片a免费播放 久久久久久久久91 国产99久久久久久免费看 | 夜夜看| 免费国产自久久久久三四区久久 | chinesegv男男猛男无套 | 一区二区免费网站 | 欧美精品18| 亚洲影视在线 | 免费在线观看毛片视频 | 欧美成人影院 | 久草在线新时代视觉 | 亚洲第一激情 | 在线观看视频日本 | 中文字幕www. |