從零開始學習C語言(一)之讀取文本文件(函數fgets)

爲何說是從零開始呢,只要是學計算機的都會學C,但那是學校的事了,我都還給老師了。老師對不住啊。您白教我位學生了。
      最近開始學習C,緣由:上司讓我用C寫一程序。大致是:經過daemon程序從/proc/net/dev讀取並統計流量,經過socket鏈接在server上讀取daemon提供的流量信息並顯示,經過gd庫繪製圖形
 
    那麼首先是解決 daemon  這個在WIN和LINUX是通用的,網上特別多的資料,我在這裏就不寫了。(daemon是守護進程)
        如何從/proc/net/dev 中讀取數據呢?首先要判斷文件是什麼類型的,有文本文件,二進制文件,我這裏的文件是文本文件。
用到的C 函數fgets  fopen  fclose
fgets 的具體用法爲:
  fgets(由文件中讀取一字符串) 
相關函數  open,fread,fscanf,getc
 
表頭文件  include<stdio.h>
 
定義函數  har * fgets(char * s,int size,FILE * stream);
 
函數說明  fgets()用來從參數stream所指的文件內讀入字符並存到參數s所指的內存空間,直到出現換行字符、讀到文件尾或是已讀了size-1個字符爲止,最後會加上NULL做爲字符串結束。
 
返回值  gets()若成功則返回s指針,返回NULL則表示有錯誤發生。
 
範例  #include<stdio.h>
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}
 
執行  this is a test /*輸入*/
this is a test /*輸出*/
 
 
 
 
 
在代碼中我還用到了一個for循環。具體代碼以下:
#include <stdio.h>  
  
void main()  
{  
           char s[255];  
           int i;  
           int bytesNumber;  
          FILE  *fp;  
          fp=fopen( "/proc/net/dev", "r");     //選擇讀取的文件 r 以只讀方式打開
          fgets(s, 255, fp);          
          printf( "%s\n", s);                       //跳過第一行
          fgets(s, 255, fp);            
          printf( "%s\n", s);                       //跳過第二行
          fgets(s, 255, fp);        
          printf( "%s\n", s);              
          printf( "now read bytes:", s);         //說明從第三行開始讀      
          fscanf(fp, "%s", s);  
          fscanf(fp, "%d", &bytesNumber);       //輸出bytes 這個數
          printf( "bytes is %d", bytesNumber);          

               for( i=1; i<=9; i++) {                   //for 循環從1開始到9結束
              
              fscanf(fp, "%d", &bytesNumber);      
          }  
          printf( "\tAnother bytes is %d\n", bytesNumber);                             
          fgets(s, 255, fp);              
            
          printf( "Read complete.\n");           //說明結束      
          fclose(fp);                                 //關閉文件讀取
        }

 
 
這樣能夠輸出文本文件裏的二個數組。從第三行1開始輸出,到第9列結束。
 
這個腳本是在linux下測試的保存方式爲:test.c
運行方式爲:gcc -wall -o test test.c
在不報錯的狀況能夠生成test文件
#./test 運行這個文件就能夠輸出你想看到的信息了。
 
花了我一天的時間,總算是完成了,對於高手來講,實在是太簡單,誰讓我從零開始呢。
明天繼續寫c socket 的用法。如今尚未明白呢。努力吧。
 
11月28日更新: 上面那段代碼進行了修改.代碼以下:
 
void myread( char *buff)  
{  
char buf[1024];  
FILE *fp;  
fp = fopen( "/proc/net/dev", "r");  
if(!fp)  
{  
perror( "fopen");  
exit(2);  
}  
fgets(buf, 1024, fp);  
fgets(buf, 1024, fp);  
fgets(buf, 1024, fp);  
fgets(buf, 1024, fp);  
fscanf(fp, "%s", buf);  
snprintf(buff, 100, "%s", buf);  
  
fclose(fp);  
printf( "%s\n", buf);  
}
相關文章
相關標籤/搜索