将 POSIX C 代码移植到 Windows

Posted

技术标签:

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

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

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

以上是关于将 POSIX C 代码移植到 Windows的主要内容,如果未能解决你的问题,请参考以下文章

posix

[架构之路-59]:目标系统 - 平台软件 - 基础中间件 - POSIX(可移植操作系统接口)与标准库函数libc

基础概念——什么是POSIX

可移植代码 - 每个字符的位数

UNIX标准及实现

POSIX相关概念