Linux实现HANDLE和DCB

时间:2015-11-04 14:25:23

标签: c++ linux windows

我必须将程序迁移到使用Windows HANDLE和DCB的Linux,例如:

int DLMSClient::GXGetCommState(HANDLE hWnd, LPDCB DCB) { //code }

我如何将这些迁移到Linux?

here开始,我已经想出了如何迁移DWORD,WORD和BYTE,但我将如何处理这些新类型呢?

此外,我可以帮助您了解此过程的来源。

2 个答案:

答案 0 :(得分:2)

您可能正在使用串行端口,但在Linux中,串行端口的管理方式与Windows中的方式略有不同。它们之间没有简单的一对一映射。此外,在Linux中,串口终端,它们可能让您大吃一惊。

我会试着解释一下:

  • Windows HANDLE将映射到Linux文件描述符。这是一个简单的int值。
  • 在Windows中,您获得HANDLE CreateFile("\\\\.\\COM1", ...)。在Linux中,您可以使用open("/dev/ttyS0", O_RDWR | O_NOCTTY)获取它。 O_NOCTTY标志是为了避免使这个端口成为你的控制终端(你不需要一个令人惊讶的控制终端!)。
  • 在Windows中,您使用HANDLE关闭CloseHandle(handle)。在Linux中,使用close(fd)
  • 在Windows中,您使用BuildCommDCB()SetCommState(...)配置串行端口。在Linux中,您可以使用tcgetattr()cfmakeraw()cfsetspeed()tcsetattr()以及其他...您可能需要raw模式。
  • 在Windows中,您使用WriteFile()发送数据,并使用ReadFile()接收数据。在Linux中,您使用read()write()

我希望这足以让你开始。

答案 1 :(得分:1)

HANDLE被定义为指向void的指针(PVOID = void*

(见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx

LPDCB被定义为"指向DCB结构的指针"

(见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa363214%28v=vs.85%29.aspx