1

我有错误:

错误 C2039: 'read' : is not a member of '`global namespace'' and error C2661: 'Calc::SymString::read' : 没有重载函数从该行接受 3 个参数: if (::read(fd_sock, &size, 4) != 4)

这个错误和类似的错误在我的代码中出现了很多。有谁知道是什么问题?我正在使用 Windows Visual Studio 2010,并且正在从 Unix 迁移代码。提前致谢!

4

2 回答 2

3

read() 是 unistd.h 中定义的 UNIX 函数(在 LINUX 中)——我读过的所有文档都表明它不是标准的 C 函数。这可能是它在 UNIX 中编译但在 Windows 中不编译的原因。

在 UNIXread()中采用文件描述符,但在 Windows 中等效的构造是“句柄”。

您的程序中真的需要低级文件描述符 I/O 吗?您可以使用fread标准 C 函数吗?

这篇 Microsoft 支持文章介绍了 Windows 中可用的文件句柄类型:

There are multiple types of file handles that can be opened using 
the Win32 API and the C Run-time:

   Returned Type  File Creation API      API Set
   ---------------------------------------------
   HANDLE         CreateFile()           Win32
   HFILE          OpenFile()/_lcreat()   Win32
   int            _creat()/_open()       C Run-time
   FILE *         fopen()                C Run-time
于 2012-07-25T19:06:51.600 回答
1

Microsoft 在io.h.

尝试包含该标题 - 您可能会收到一堆关于使用已弃用名称的警告(MS 更希望您使用该名称_read())。如果是这样,您可能想要定义_POSIX_应该消除这些警告的宏。

于 2012-07-25T22:08:18.530 回答