CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

做socket程序,用recv,send这些函数好还是用fread,fwrite好?

楼主Ligaof()2006-03-29 15:28:25 在 Linux/Unix社区 / 程序开发区 提问

是不是recv,send效率低呢?也就是时间长呢? 问题点数:50、回复次数:10Top

1 楼fierygnu(va_list)回复于 2006-03-29 15:31:51 得分 20

用read/write,recv/send都行,不要用fread系列。  
  效率不低。Top

2 楼Ligaof()回复于 2006-03-29 15:43:18 得分 0

为什么不能用fwrite系列呢?你是担心数据不能被立即写出去吗?可以用fflush()啊。据说流I/O比系统I/O快3倍呢!  
   
  另外,fierygnu你是不是一直在网上啊,怎么回答得这么快!Top

3 楼fierygnu(va_list)回复于 2006-03-29 15:48:20 得分 0

闲的时候就在网上:)  
   
  fread适合于文件I/O,快是因为有缓冲、预读等机制。虽然都是read/write,但网络接口和磁盘接口的read/write不一样。另外在不同的系统上,FILE结构定义不一样,原来的FILE结构只能使用256以下的描述符值。Top

4 楼Ligaof()回复于 2006-03-29 15:55:35 得分 0

最近我看了一个人的代码,对socket就是用的fread系列,也是可以的吧。  
  你懂得这么多,真羡慕!Top

5 楼fierygnu(va_list)回复于 2006-03-29 16:45:34 得分 0

不是不可以,就是我上面说的问题:真正的效率和FILE的限制。  
  此外,要对socket进行各种设置,必须用文件描述符。Top

6 楼bjpy2005(冰城的神话)回复于 2006-03-29 18:21:41 得分 10

不建议使用fread和fwrite不仅考虑效率问题。在很多异构系统通过网络互连起来,在一个系统上写的数据,在另一个系统上读,在这种情况下,这两个函数就不能正常工作,其原因是:  
  1。在一个结构中,同一成员的位移量可能随编译程序和系统的不同而异(由于不同的对准要求)。在某些编译程序有一选项,允许紧密包装结构(节省存储空间,而运行性能有所下降)或准确对齐,以便在运行时易于存取结构中的各成员,这意味着即使在单一系统上,一个结构的二进制存放方式也可能因编译程序的选择项而不同。  
  2。用来存储多字节整数和浮点值的二进制格式在不同系统结构间也可能不同。Top

7 楼fierygnu(va_list)回复于 2006-03-29 18:25:35 得分 0

fread和fwrite也是基于流的,不存在这些问题。这些问题需要应用自己考虑,或者说属于应用层协议的范围。Top

8 楼tb01412(tb)回复于 2006-03-29 22:41:20 得分 20

做socket程序,用recv,send这些函数好还是用fread,fwrite好?  
   
  一般说来是用recv,send,read,write等函数,用fopen系列函数是在C库中有缓冲的,一般用于对文件进行操作,而用read系列函数在C库中无缓冲,用于设备级读写。  
   
  缓冲有几个概念:  
  一是应用级缓冲,就是在C库中的缓冲,比如在LINUX中的printf中如果不加\n它就暂不输出,道理是一样的。  
  二是块设备高冲缓冲,这是在内核磁盘高速缓冲区的概念  
  三是硬件缓冲,比如CACHE,外围设备在硬件上的缓冲等,不过不用了解到这个层面上去Top

9 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2006-03-30 01:23:44 得分 0

fierygnu(va_list)   (   )   信誉:105     2006-3-29   15:31:52     得分:   0      
  >   ...        
  >   效率不低。  
   
   
  :-   )  
   
  fierygnu   真的知道很多知识,偶也很羡慕Top

10 楼Ligaof()回复于 2006-03-30 08:51:46 得分 0

好了,讨论了这么多,这个问题可以结帖了吧!Top

相关问题

  • C 库函数fread,fwrite 比Win32 API ReadFile,WriteFile 快多少?
  • c语言中fprintf和fopen以及fread fwrite函数的问题
  • 关于fwrite(...)函数....
  • fread函数的问题?
  • fwrite函数的问题?
  • 高分寻求fread函数详解
  • 关于recv() 函数问题! 急!!!急!!!!
  • socket编程:recv(...)函数问题求救
  • fread函数的奇怪问题
  • recv()函数无法接收数据

关键词

  • 函数
  • 结构
  • 系统
  • 文件
  • socket
  • 缓冲
  • fread
  • fwrite
  • fierygnu
  • 编译程序

得分解答快速导航

  • 帖主:Ligaof
  • fierygnu
  • bjpy2005
  • tb01412

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo