【问题标题】:Porting POSIX C code to windows将 POSIX C 代码移植到 Windows
【发布时间】:2012-02-08 13:23:20
【问题描述】:

我刚刚完成了一个用 C 编写的小项目,我从串口读取数据流并解析传入的数据。 该软件是为 POSIX 系统编写的(使用 termios),并遵循使用串行 i/o 的标准步骤

  1. 使用 open() 打开串口设备
  2. 配置通信参数 (termios)
  3. 在文件句柄 (fcntl) 上设置阻塞模式
  4. 在串行接口上​​执行 read()。
  5. 完成后在串行接口上​​执行 close()。

除了插座部分,代码是直接ANSI C。

我的问题是,让代码在 Windows 平台上运行会涉及多少。 移植不是我写的,我只是想给可能有兴趣移植它的其他人一个指示(即琐碎,不是那么琐碎,把你的眼睛挖出来导致精神错乱)。

另外,如果有人拥有带有“UNIX 的 Windows 服务”的 Windows,他们是否能够在不修改代码的情况下使用该代码?

所以,如果有人有这方面的经验,请您分享一下。

【问题讨论】:

    标签: c windows serial-port posix termios


    【解决方案1】:

    这应该很容易做到。名称非常不同,但调用顺序和概念非常相似。

    您正在寻找的是DCB 结构,它应该与SetComState() 函数一起使用来设置波特率、停止位等。然后使用SetCommTimeouts() 并在COMMTIMEOUTS 结构中设置超时值以使后续读取调用阻塞。

    这是一个漂亮的 PDF 格式的 short introduction(Backup.)

    【讨论】:

    • 谢谢,DCB 结构几乎直接映射到 termios 结构。由于在 *nix 系统中将所有内容都表示为文件是正常的,我担心这在 Windows 中会出现问题。但是您也可以在 Windows 中声明文件句柄并以几乎相同的方式使用它,所以我很高兴。谢谢