从零开始学习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);  
}
相关文章
相关标签/搜索