在套接字编程中,read()和recv(),以及send()和write()在性能、速度和其他行为方面有什么不同?
当前回答
Read()和write()更通用,它们适用于任何文件描述符。 但是,它们不能在Windows上运行。
您可以将其他选项传递给send()和recv(),因此在某些情况下可能必须使用它们。
其他回答
Read()和write()更通用,它们适用于任何文件描述符。 但是,它们不能在Windows上运行。
您可以将其他选项传递给send()和recv(),因此在某些情况下可能必须使用它们。
您可以使用write()和read()来代替send()和recv(),但是send()和recv()对数据传输提供了更大的控制
“性能和速度”?那些不是…同义词,在这里吗?
无论如何,recv()调用接受read()不接受的标志,这使得它更强大,或者至少更方便。这是一个不同之处。我不认为有显著的性能差异,但还没有进行测试。
I just noticed recently that when I used write() on a socket in Windows, it almost works (the FD passed to write() isn't the same as the one passed to send(); I used _open_osfhandle() to get the FD to pass to write()). However, it didn't work when I tried to send binary data that included character 10. write() somewhere inserted character 13 before this. Changing it to send() with a flags parameter of 0 fixed that problem. read() could have the reverse problem if 13-10 are consecutive in the binary data, but I haven't tested it. But that appears to be another possible difference between send() and write().
linux上的另一件事是:
Send不允许对非套接字fd进行操作。因此,例如在usb端口上写入,写入是必要的。
推荐文章
- 在参数数量上重载宏
- 越界访问数组有多危险?
- 'for'循环中的后增量和前增量产生相同的输出
- 互联网上最大的安全UDP包大小是多少
- 如何在父进程退出后使子进程死亡?
- 内存泄漏是否正常?
- Unix列表命令'ls'可以输出数值chmod权限吗?
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- 如何正确比较C中的字符串?
- 为什么这个for循环在某些平台上退出,而在其他平台上不退出?
- 关闭vs关闭套接字?
- 快速unix命令显示文件中间的特定行?
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串