亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言實現(xiàn)修改文本文件中特定行的實現(xiàn)代碼

 更新時間:2013年06月25日 01:13:03   作者:  
最近由于項目需要實現(xiàn)修改文件的功能,所以,博主認真查閱了一些資料,但是,很遺憾,并沒有太多的收獲

好的,首先我先敘述下功能要求:
其實很簡單,就是Shell中sed命令的C語言實現(xiàn),實現(xiàn)定位到所需要的字段的那一行,之后修改成需要的內(nèi)容。但是由于C語言是面向過程的語言,需要順序執(zhí)行的特點,所以,實現(xiàn)中遇到了很多麻煩,在這里博主將實現(xiàn)的過程描述如下,以便大家參考。

問題描述:

文本內(nèi)容:

復制代碼 代碼如下:

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

我需要做的就是修改第四行的內(nèi)容,使之變?yōu)椋?/P>

復制代碼 代碼如下:

wireless.1.current_state=0

問題看似簡單,實現(xiàn)過程頗費周折。。。

這里我給出實現(xiàn)的代碼,注釋已經(jīng)加在代碼中:

復制代碼 代碼如下:

/*
 * 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))
  {
   /*
    * 由于已經(jīng)找到所需要寫的位置,所以需要寫位置的“頭”
    */
   len -= strlen(linebuffer);
   /*
    * 實現(xiàn)文件位置的偏移,為寫文件做準備
    */
   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));
   /*
    * 寫文件,存入所需的內(nèi)容
       */
   fprintf(fp, "%s", buffer1);
   fclose(fp);
   return;
  }
 }
return 0;
}

保存文件名為:my_sed.c

運行效果如下:

我們再來看文件中的內(nèi)容已經(jīng)變?yōu)椋?

復制代碼 代碼如下:

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


實現(xiàn)原理:

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

相關文章

  • C++虛函數(shù)表和虛析構介紹

    C++虛函數(shù)表和虛析構介紹

    這篇文章主要介紹了C++虛函數(shù)表和虛析構,虛函數(shù)表是C++實現(xiàn)多態(tài)的基礎,多態(tài)是面向?qū)ο蟮娜筇匦灾?,下面文章我們一起來看看詳細?nèi)容,需要的朋友可以參考一下
    2021-11-11
  • C語言基礎 strlen 函數(shù)

    C語言基礎 strlen 函數(shù)

    這篇文章主要介紹了C語言基礎 strlen 函數(shù),在C 語言中,char 字符串也是一種非常重要的數(shù)據(jù)類型,我們可以使用 strlen 函數(shù)獲取字符串長度,這就是C語言strlen 函數(shù)的作用,下面我們來簡單介紹該內(nèi)容,需要的朋友可以參考以下
    2021-10-10
  • C++代碼規(guī)范之命名規(guī)則

    C++代碼規(guī)范之命名規(guī)則

    以下是對C++中的命名規(guī)則進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C++實現(xiàn)LeetCode(53.最大子數(shù)組)

    C++實現(xiàn)LeetCode(53.最大子數(shù)組)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(53.最大子數(shù)組),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c++實現(xiàn)LinkBlockedQueue的問題

    c++實現(xiàn)LinkBlockedQueue的問題

    這篇文章主要介紹了c++實現(xiàn)LinkBlockedQueue的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 使用鉤子如何鎖定鍵盤的方法分享

    使用鉤子如何鎖定鍵盤的方法分享

    鎖鍵盤一般用鉤子實現(xiàn),所以難度稍大,不過下面這個程序當簡單,而且連鉤子所需要DLL也省了
    2014-01-01
  • windows 下C++生成Dump調(diào)試文件與分析

    windows 下C++生成Dump調(diào)試文件與分析

    dump文件是C++程序發(fā)生異常時,保存當時程序運行狀態(tài)的文件,是調(diào)試異常程序重要的方法,所以程序崩潰時,除了日志文件,dump文件便成了我們查找錯誤的最后一根救命的稻草,這篇文章主要介紹了windows 下C++生成Dump調(diào)試文件與分析,需要的朋友可以參考下
    2023-04-04
  • c++顯式棧實現(xiàn)遞歸介紹

    c++顯式棧實現(xiàn)遞歸介紹

    大家好,本篇文章主要講的是c++顯式棧實現(xiàn)遞歸介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++使用UDP通訊的實現(xiàn)示例

    C++使用UDP通訊的實現(xiàn)示例

    本文實現(xiàn)對C++使用UDP做了簡單封裝,實現(xiàn)通訊,包括服務端和客戶端,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • MFC繪制不規(guī)則窗體的方法

    MFC繪制不規(guī)則窗體的方法

    這篇文章主要介紹了MFC繪制不規(guī)則窗體的方法,涉及MFC窗體操作的相關技巧,需要的朋友可以參考下
    2015-05-05

最新評論