免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jb_0625

请版主帮忙!!! [复制链接]

论坛徽章:
0
发表于 2003-01-22 16:36 |显示全部楼层

请版主帮忙!!!

用fopen可以行读取文件吗,如果文件很大是否缓冲区会溢出

论坛徽章:
0
发表于 2003-01-22 18:22 |显示全部楼层

请版主帮忙!!!

风fopen 可以按行读入文件

如果你传入的缓冲区足够大的话
那么是不会缓冲区溢出的

  1. while ((fgets(ch,1000,fp))!=EOF) { //只要ch长度大于等于1000
  2. 那么就不会溢出

  3. bzero(sendbuf,MAXDATASIZE);
  4. memcpy(sendbuf,&ch,sizeof(ch)); //把sizeof改成strlen比较好
  5. //sizeof是求变量大小strlen是求字符串长度
  6. //这里你是不是只要传送读到的字符就可以了
  7. 而不是传1000个字符
  8. send(connectfd,sendbuf,sizeof(sendbuf),0); //同理这也改成strlen
  9. }

复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2003-01-22 18:48 |显示全部楼层

请版主帮忙!!!

这样的话就只能传送文本文件。
建议用 fopen( ..., "rb" ) + fread();
fread() 的用法:
int fread( void *ptr, size_t size, size_t nitems, FILE *stream );
ptr 是用来存放内容的缓冲;
size 是一个单位尺寸;
nitems 是指一共要读几个单位长度?
stream 是文件指针;
函数返回的是成功读取的单位个数.
例子:
ret = fread( buffer, 1, 1000, fp );
就是指:
从 fp  中读取 1000 个单位,每个单位长度是 1, 结果存放在 buffer 中。
调用完毕后 ret 中的值就是成功读取到的单位个数,如果 ret < 1000,则说明已经到了文件尾部。

论坛徽章:
0
发表于 2003-01-22 19:32 |显示全部楼层

请版主帮忙!!!

代码太乱,没有看完,提一点建议:如果是以文本方式打开文件就不用考虑字节顺序转换的问题了,如果是二进制就不好做了,可以以结构为逻辑单位,对结构进行字节顺序转换

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2003-01-22 19:38 |显示全部楼层

请版主帮忙!!!

[quote]原帖由 "channelV"]代码太乱,没有看完,提一点建议:如果是以文本方式打开文件就不用考虑字节顺序转换的问题了,如果是二进制就不好做了,可以以结构为逻辑单位,对结构进行字节顺序转换[/quote 发表:

1。传送文件必须是以二进制方式打开!
2。传送文件千万不能转换字节序!

论坛徽章:
0
发表于 2003-01-22 19:45 |显示全部楼层

请版主帮忙!!!

如果文件是按照结构写入的,传送两端的字节顺序不同,文件传送后,对方无法使用此文件,必须进行转换后才能使用,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP