当前位置: 技术问答>linux和unix
做socket程序,用recv,send这些函数好还是用fread,fwrite好?
来源: 互联网 发布时间:2015-11-16
本文导语: 是不是recv,send效率低呢?也就是时间长呢? | 用read/write,recv/send都行,不要用fread系列。 效率不低。 | 做socket程序,用recv,send这些函数好还是用fread,fwrite好? 一般说来是...
是不是recv,send效率低呢?也就是时间长呢?
|
用read/write,recv/send都行,不要用fread系列。
效率不低。
效率不低。
|
做socket程序,用recv,send这些函数好还是用fread,fwrite好?
一般说来是用recv,send,read,write等函数,用fopen系列函数是在C库中有缓冲的,一般用于对文件进行操作,而用read系列函数在C库中无缓冲,用于设备级读写。
缓冲有几个概念:
一是应用级缓冲,就是在C库中的缓冲,比如在LINUX中的printf中如果不加n它就暂不输出,道理是一样的。
二是块设备高冲缓冲,这是在内核磁盘高速缓冲区的概念
三是硬件缓冲,比如CACHE,外围设备在硬件上的缓冲等,不过不用了解到这个层面上去
一般说来是用recv,send,read,write等函数,用fopen系列函数是在C库中有缓冲的,一般用于对文件进行操作,而用read系列函数在C库中无缓冲,用于设备级读写。
缓冲有几个概念:
一是应用级缓冲,就是在C库中的缓冲,比如在LINUX中的printf中如果不加n它就暂不输出,道理是一样的。
二是块设备高冲缓冲,这是在内核磁盘高速缓冲区的概念
三是硬件缓冲,比如CACHE,外围设备在硬件上的缓冲等,不过不用了解到这个层面上去
|
不建议使用fread和fwrite不仅考虑效率问题。在很多异构系统通过网络互连起来,在一个系统上写的数据,在另一个系统上读,在这种情况下,这两个函数就不能正常工作,其原因是:
1。在一个结构中,同一成员的位移量可能随编译程序和系统的不同而异(由于不同的对准要求)。在某些编译程序有一选项,允许紧密包装结构(节省存储空间,而运行性能有所下降)或准确对齐,以便在运行时易于存取结构中的各成员,这意味着即使在单一系统上,一个结构的二进制存放方式也可能因编译程序的选择项而不同。
2。用来存储多字节整数和浮点值的二进制格式在不同系统结构间也可能不同。
1。在一个结构中,同一成员的位移量可能随编译程序和系统的不同而异(由于不同的对准要求)。在某些编译程序有一选项,允许紧密包装结构(节省存储空间,而运行性能有所下降)或准确对齐,以便在运行时易于存取结构中的各成员,这意味着即使在单一系统上,一个结构的二进制存放方式也可能因编译程序的选择项而不同。
2。用来存储多字节整数和浮点值的二进制格式在不同系统结构间也可能不同。