winsock不支持读/写

use*_*374 3 c winsock

一个小的测试程序(使用MinGW在Linux上编译),我注意到一个不能使用read,并write为使用的Winsock2的实施获得呼吁套接字fd socket调用.写调用返回<0并设置errno = EBADF.

想想从xinetd运行的程序,减去他们的stdin/stdout始终是套接字的假设.(例如,某些程序会调用getpeername,如果它不是套接字,则会失败,随后它们可能会过早退出.)

那么,除了对fd进行假设之外,如何在/ windin/stdout中读取/写入的{文件描述符类型} - 不可知程序应该合理地在win32环境中工作?

或者更简单地说,是否有一些魔术函数调用被执行以连接Winsock2套接字fds与win32(井,mingw)write实现?

che*_*rno 6

read()write()功能是POSIX I/O系统调用,而不是插座API调用.

MinGW用于编译本机Windows平台.它不提供POSIX环境.

将MinGW与Winsock一起使用时,您有两种选择:

  1. 使用套接字API调用send()recv().
  2. 使用Windows I/O系统调用WriteFile()ReadFile().


R..*_*R.. 5

如果要在Windows上执行任何合理的行为,请不要忘记mingw。它使用MSVC ++标准库,该库甚至无法设法符合普通的C标准,更不用说POSIX了。遗憾的是,cygwin有点肿,但我只接受膨胀作为Windows编程的代价,并选择cygwin。或者,您可以为所编写的每个程序编写2个不同的版本(可能与#ifdefs 纠缠在一起),以支持MSVC和POSIX。