LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1251|回复: 7

文件指针到底是个什么东西???(已解决)

[复制链接]
发表于 2008-1-13 22:10:27 | 显示全部楼层 |阅读模式
我的代码是这样的:
int main()
{
      FILE *mystream = fopen("***.txt","rw");
      write_data(mystream);
}

void write_data(FILE *fp)
{
      while(1)
      {
             readnum = fread(buf, 1024, 1, fp);
      }
}


这段代码说明了主要的内容
我编译链接后,在gdb中进行调试
发现,readnum每次都为0,且每次读取的文件的内容都是一样的
也就是说,程序死在这儿了,不断的读取着相同的内容,根本不会到达文件未尾。
难道这里进行参数传递的时候有问题吗??
还是…………

真是迷惑不解呀
我将write_data的参数变成指向指针的指针,即write_data(FILE **)
结果还是一样。

不知道这是什么原因造成的?
发表于 2008-1-13 22:28:07 | 显示全部楼层
while(1)
{
    readnum = fread(buf, 1024, 1, fp);
}

不管读出什么来,这确实是个死循环。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-13 23:00:22 | 显示全部楼层
我这是简写的
其实有条件break的
我用gdb单步的时候,发现每次读入的数据都是相同的
就好像每次rewind(fp),然后再读似的
回复 支持 反对

使用道具 举报

发表于 2008-1-14 09:41:57 | 显示全部楼层
fread 的返回值是成功读入的 “单位”数
(“单位”是指在第三个参数指定的字节数,比如你上面的是1个字节)
回复 支持 反对

使用道具 举报

发表于 2008-1-14 14:10:54 | 显示全部楼层
上面是1024字节
莫非是文件没这么长,所以每次都返回0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-14 18:31:55 | 显示全部楼层
具体原因还不知道
不过,在使用这个文件之前,先关闭,然后在函数中再打开,就正常了
回复 支持 反对

使用道具 举报

发表于 2008-2-3 12:27:02 | 显示全部楼层
只要文件不为空,不管长度够不够,第一次总应该不为0
回复 支持 反对

使用道具 举报

发表于 2008-2-3 13:46:13 | 显示全部楼层
Post by godpig;1807077
具体原因还不知道
不过,在使用这个文件之前,先关闭,然后在函数中再打开,就正常了
你重新打开的方法,参数都一样吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表