免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5274 | 回复: 13
打印 上一主题 下一主题

首次提问,希望大家帮助..read与fread问题  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-18 11:37 |只看该作者 |倒序浏览
我想知道这样一个问题
在LINUX下
fread(cbuf,1,bsize,fp);//cbuf是定义的一个char cbuf[512]
  在执行fread后,我想下次再次执行fread时,fp的指针 是已经偏移了bsize

我想问的是如果用read(fd, cbuf,bsize)后,,当下次 再次调用read时.fd扁移了没..这个问题很蠢.我没测试.但我认为.应该是不变的..因为这里的fd是int


  大家PP..详细说一下阿

[ 本帖最后由 寂寞游侠 于 2006-8-18 11:48 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-18 11:44 |只看该作者
当然会变的

论坛徽章:
0
3 [报告]
发表于 2006-08-18 11:47 |只看该作者
楼上的 意思是

read(fd, cbuf,bsize)后,,当下次 再次调用read时.fd也扁移了?

比如一个文件里面是20个字节,我先read读5个.下次再read..是不是 直接从文件的第6个字节开始读?

如果用fread的话..是这样的..但read不清楚

论坛徽章:
0
4 [报告]
发表于 2006-08-18 11:55 |只看该作者
再次顶起..

论坛徽章:
0
5 [报告]
发表于 2006-08-18 12:12 |只看该作者
原帖由 寂寞游侠 于 2006-8-18 11:47 发表
楼上的 意思是

read(fd, cbuf,bsize)后,,当下次 再次调用read时.fd也扁移了?

比如一个文件里面是20个字节,我先read读5个.下次再read..是不是 直接从文件的第6个字节开始读?

如果用fread的话..是这样的.. ...

是的,你自己写一个看看不就行了

论坛徽章:
0
6 [报告]
发表于 2006-08-18 12:25 |只看该作者
在执行fread后,我想下次再次执行fread时,fp的指针 是已经偏移了bsize

两个指针之间没有任何关系, fp是一个FILE结构的指针,他用来代表一个已经打开的文件.

操作系统将文件视为一个字节流,如果你要读取文件的话,就必须有一个记录已经读到哪里的变量--用来跟踪从那里读写,这个就是你说说得"文件指针",它和文件结构的指针根本就是两回事,进行文件操作时,修改的是"文件指针'.

read(fd, cbuf,bsize)后,,当下次 再次调用read时.fd也扁移了?
fd就是文件描述符,它是打开文件操作后,操作系统用来标识所打开文件的整数,和前面所说的一样,和用于标识文件流的当前位置的文件指针是不一样的.

无论你怎么针对文件进行操作,你操作的始终是同一个文件,所以fp和fd根本是不可能变得,变化的只用用以标识字节流的当前位置的"文件指针"

论坛徽章:
0
7 [报告]
发表于 2006-08-18 12:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2006-08-18 12:57 |只看该作者
非常感谢楼上的 回答...

  但经本人测试fread()..在执行fread(cbuf,1,bsize,fp);后.再次执行Fread时.他确实 是从文件的bsize处.再读取bsize个字节到cbuf里面


  而read是否也这样.. 大家PP////
最好说下结果..是否可以...



我看到的一个write的用法

  1. buffer_p=buffer;
  2. while((bytes_write=write(outfile,buffer_p,bytes_read))!=0)
  3. {
  4. if((bytes_write==-1)&&(errno!=EINTR))break;
  5. else if(bytes_write==bytes_read)break;
  6. else if(bytes_write>;0)
  7. {[color=Red]
  8. buffer_p+=bytes_write;   //很明显.这里 加butes_write.目的是 为了偏移.说明自身不偏移,同理read也应该如此.....大家给了 确切的答案![/color]
  9. bytes_read-=bytes_write;
  10. }
  11. }
  12. if(bytes_write==-1)break;
  13. *bytes_copy_p+=bytes_read;
  14. }
复制代码



buffer_p+=bytes_write;   //很明显.这里 加butes_write.目的是 为了偏移.说明自身不偏移,同理read也应该如此.....大家给个 确切的答案!]Sample Text

[ 本帖最后由 寂寞游侠 于 2006-8-18 12:59 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-08-18 13:03 |只看该作者
原帖由 coldwarm 于 2006-8-18 12:25 发表
在执行fread后,我想下次再次执行fread时,fp的指针 是已经偏移了bsize

两个指针之间没有任何关系, fp是一个FILE结构的指针,他用来代表一个已经打开的文件.

操作系统将文件视为一个字节流,如果你要读取文件的 ...



刚刚看明白..

  ....//我想问一下执行fread和read后..他们的文件指针都会变化吗? 我的意思是 如果他们变化的话.在下次执行fread 和read时..他们会自动  从 上次执行后.文件指针 偏移后 的位置处  读取 ...而不需要人工去 作 偏移.


   我的认为是fread会..但read的文件指针不自动变化...可以看我上次给出的例子
再次感谢!

[ 本帖最后由 寂寞游侠 于 2006-8-18 13:05 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-08-18 13:54 |只看该作者
LZ 说话 有些颠倒呀! 刚才问的是  fread VS read   现在又成了 write  VS  fread
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP