“已弃用的POSIX函数”`read`引发异常

时间:2015-02-11 12:16:26

标签: c posix msvc12

我正在使用MSVC(VS 2013)在调试模式下编译跨平台C库(在Linux上工作正常,并且曾经在Windows上工作)。当我从C标准库中调用read时,我有时会得到例外:

  

将无效参数传递给认为无效参数致命的函数。

我相信参数(文件描述符,缓冲区,长度)都可以。即使文件描述符无效,我也希望它返回-1。代码(不是我自己的代码,它是跨平台的,在Linux上运行正常)实际检查返回值是否为-1并且相应地起作用。

MSDN非常无益,只是说:

  

read

     

不推荐使用此POSIX功能。请改用ISO C ++ _ read

但是,我只是尝试将read替换为_read,并且效果非常好。

  • read_read之间究竟有什么区别?由于read没有记录,我无法查找。它似乎做了同样的事情,但也提出了例外。

  • 我可以简单地混合使用POSIX函数"和" ISO C ++符合" * 1?例如" open"和" _read"?它似乎工作正常

  • 我可以#define read _read等等,并希望它能像在Linux上一样工作吗?


*)请注意,尽管文档中包含语言,但该项目是纯C而不是C ++。 MSVC很奇怪,它不是真正的C或C ++,而是某种意义上的C / C ++。此外,引发异常的事实并不意味着我使用的是C ++,但它是C,IIRC的非标准Windows扩展。

1 个答案:

答案 0 :(得分:1)

  

我可以#define read _read等等,并希望它能像在Linux上一样工作吗?

是的,只要这样做,它就能解决问题,而且你的代码将是跨平台的,只要记住还有其他功能存在同样的问题。