gpt4 book ai didi

c++ - HANDLE 和 DCB 的 Linux 实现

转载 作者:可可西里 更新时间:2023-11-01 11:26:45 27 4
gpt4 key购买 nike

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

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

我该如何将它们迁移到 Linux?

来自 here ,我已经弄清楚如何迁移 DWORD、WORD 和 BYTE,但我该如何处理这些新类型?

此外,我可以了解此过程的来源可能会有所帮助。

最佳答案

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

我会试着解释一下:

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

我希望这足以让您入门。

关于c++ - HANDLE 和 DCB 的 Linux 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com