【问题标题】:Is there any Windows port of write() syscall from *nix unistd.h?是否有来自 *nix unistd.h 的 write() 系统调用的 Windows 端口?
【发布时间】:2010-12-09 13:58:49
【问题描述】:

我有一个早期为 Linux 环境构建的大型代码,其中涉及从 unistd.h 调用 write()。是否有任何可用于 Win32 环境的 write() 调用端口。如果可能,我希望在 Windows 环境(MS-VS 2005 环境)上“按原样”构建这个大型代码库,而无需触及代码。

更改代码以将 write() 调用替换为 fwrite() 将是繁琐的手动过程,因为两者的签名不同。

已编辑:实际上许多其他基于 unix 的调用在 Windows 环境中也会失败 - read()、open()、close()...

任何指针都会很有用。

谢谢。

-AD

【问题讨论】:

标签: unix visual-studio-2005


【解决方案1】:

Microsoft 的 C 运行时有 _open _read _write 等作为“low-level I/O”。但是,这些是由 C 运行时层管理的兼容性包装器mangled,并受到诸如“受_getmaxstdiocan't go higher than 2048 限制”之类的限制。

您可以使用 NT 原生 CreateFile ReadFile WriteFile 进行真正的低级 I/O。

【讨论】:

    【解决方案2】:

    如果它们不起作用,我会有点惊讶,但如果它们不起作用,最好的办法是编写一个小的移植层库,使用 Win32API 调用来实现它们。

    无可否认,这比对大量代码进行搜索和替换要快,并且还意味着您的主要代码库保持不变且可移植。

    【讨论】:

      猜你喜欢
      • 2016-05-07
      • 2018-05-21
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 2013-01-03
      • 2014-03-12
      相关资源
      最近更新 更多