2 lwqianjinjinjin lwqianjinjinjin 于 2014.12.04 10:41 提问

c 文件读写问题,rewind,break

写了个小程序,每个1秒钟读取网卡eth0的流量,代码如下,现在的问题是,我在21行加入break后,输出就只有第二次是变化的,后面就不变了,求指点,谢谢!
#include
#include
#include
#include
#define MAXLINE 1000

int main(int argc, char *argv[])
{
FILE *fp;
char buf[MAXLINE];
char *dev=" eth0";
if((fp=fopen("/proc/net/dev", "r")) == NULL){
printf("openfile error\n");
exit(1);
}

    while(1){
            while(fgets(buf, MAXLINE, fp) != NULL){
                    if(strncmp(buf, dev, 6)==0){
                            printf("%s\n",  buf);
                            break;
                    }
            }
            rewind(fp);
            sleep(1);
    }


    fclose(fp);


    return 0;

}

3个回答

lwqianjinjinjin
lwqianjinjinjin   2014.12.04 11:35
已采纳

解决了,是因为 直接break 然后rewind到头,上次read() 到缓存的文件没有读到最后,不会重新read(),解决方法是 将 break 修改为 fseek(fp, -1L, SEEK_END)

jiajia2581
jiajia2581   2014.12.04 10:47

sleep(1); 这句,这不是休眠1秒,sleep函数的参数单位是毫秒,所以如果休眠1秒应该是sleep(1000);

iamlaosong
iamlaosong   2014.12.04 10:51

break后就退出了while(fgets)循环,然后在外层循环while(1)中rewind使读取又重头开始,于是呼,不断循环,读的都是前面几行。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!