从零开始学习C语言(一)之读取文本文件(函数fgets)
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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 本文出自 51CTO.COM技术博客 |



#include <stdio.h>
守住每一天
博客统计信息
热门文章
最新评论
友情链接


