注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 小五思科技术学习笔记之SSH
 帮助

从零开始学习C语言(一)之读取文本文件(函数fgets)


2007-12-12 10:13:00
 标签:c++ linux c   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://liuyu.blog.51cto.com/183345/64073
为什么说是从零开始呢,只要是学计算机的都会学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);  
}

本文出自 “seven” 博客,请务必保留此出处http://liuyu.blog.51cto.com/183345/64073





    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: