我有错误:
错误C2039:'read':不是'`global namespace''的成员 和 错误C2661:'Calc :: SymString :: read':没有重载函数需要3个参数 从行: if(:: read(fd_sock,& size,4)!= 4)
这个错误和类似错误在我的代码中出现了很多。有谁知道是什么问题? 我正在使用Windows Visual Studio 2010,我正在从Unix迁移代码。 提前谢谢!
答案 0 :(得分:3)
read()是unistd.h中定义的UNIX函数(在LINUX中) - 我读过的所有文档都表明它不是标准的C函数。这可能是它在UNIX中进行编译但在Windows中进行编译的原因。
在UNIX read()
中获取文件描述符,但Windows中的等效构造是“句柄”。
您真的需要程序中的低级文件描述符I / O吗?你能使用fread
,这是一个标准的C函数吗?
This Microsoft support article描述了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
答案 1 :(得分:1)
Microsoft在io.h
中声明了Unix风格的I / O函数。
尝试包含该标题 - 您可能会收到一些关于使用弃用名称的警告(MS希望您使用名称_read()
)。如果是这样,您可能需要定义宏_POSIX_
,它应该使这些警告静音。