当前位置: 首页 > 面试题库 >

Windows等效于sys / select.h和termios.h中定义的功能是什么?

齐航
2023-03-14
问题内容

我在linux中有一个应用程序,该应用程序已成功编译。我想在Windows中运行相同的程序。

但是编译会产生以下与头文件有关的错误。

  1. 找不到sys / select.h
  2. 找不到termios.h

我怎样才能解决这个问题?


问题答案:

Windows API在结构上和风格上与任何Unix风格提供的系统调用和库例程的组合都非常不同。

期限

Windows使用与任何* nix系统完全不同的模型来处理终端I / O。结果,确实没有直接等同于termios.h标题及其朋友的信息。

您想在MSDN上阅读有关Windows Communications资源的信息。

一些需要了解的更多信息包括:

  • 该DCB结构
  • 该COMMTIMEOUTS结构
  • BuildCommDCB()
  • SetCommState()
  • … 还有很多 …

通常,您会发现需要直接使用Windows API进行更多处理,因为stdio在执行设备I / O时会增加混乱。

选择

没有直接等效于Unix select(2)系统调用的方法。

在Windows中,许多内核对象可以处于有信号或无信号状态,并且用信号通知对象的行为可用于释放称为的线程WaitForMultipleObjects()HANDLE当数据可用时,会发信号通知一些而非全部对象。具体来说,我知道HANDLEWinSock的s具有此功能,但我不了解Comm
API。我知道HANDLEs不能打开文件。

如果您需要等待正在处理窗口消息的线程中的事件,那么您可能应该使用MsgWaitForMultipleObjects()它,因为它可以在线程被阻塞的同时正确地传递消息。

在MSDN文章使用同步中阅读有关Windows同步原语的信息。

但是,Windows内置了几种异步I / O,它们可以select()通过更改设计来替代需求。两者都将需要大量使用不能与C stdio库结合使用的功能。

MSDN上有几篇有关I / O技术的文章,以及许多示例:

  • I / O概念
  • 同步和异步I / O
  • 同步和重叠的输入和输出
  • CreateFile() (尤其是“备注”部分)

请注意,有关Windows工作方式的许多信息分散在API函数和结构的概述文章和参考资料的备注部分中。这可能给人的印象是,初读时完全没有记载任何东西。

与Cygwin移植

另一种方法是使用Cygwin进行移植。它在Windows
API上提供了大部分POSIX层。但是,最终您将获得依赖于Cygwin
DLL(即GPL)的应用程序,除非您从他们那里购买了商业使用许可。使用Cygwin来获得对没有Unix经验的Windows用户也能很好运行的应用程序可能会很棘手,因为关于这两个系统的设置和使用方式的许多其他假设都不同。

select()在混合了不同的打开文件描述符的情况下,Cygwin进行了大量繁重的工作来构建可在Windows上运行的实现。用户指南中对此工作进行了描述。

请注意,只有在Cygwin环境中完成针对Cygwin的构建时,才进行记录和支持。仅仅将Cygwin的bin放在Windows
PATH上并从命令提示符下工作通常是不够的。您确实需要启动Cygwin的bash构建并从那里进行编译,以便所有内容都使用相同的Cygwin样式的安装点和模拟的Unix文件结构。

将Cygwin头文件与第三方工具头文件混合在一起是确保疯狂的必经之路。

编辑: 我重新安排了一下,并添加了一些材料以回应评论。



 类似资料:
  • 问题内容: 在Python中,该函数允许您迭代一系列(索引,值)对。例如: 用Java有什么办法吗? 问题答案: 对于实现接口的集合,您可以调用方法以获取。迭代器(还有其他方法)有两种方法- ,以获得索引;和,以获取值(与其他迭代器一样)。 因此,上述Python的Java等效项可能是: 与Python一样,它输出:

  • 问题内容: 我正在寻找像MySQL中那样的解析函数(有关更多信息,请参阅文档) 解析函数基于一组行来计算合计值。它们与集合函数的不同之处在于,它们为每个组返回多个行。 是否存在? 问题答案: 不,与MSDB,Oracle,PostgreSQL等其他DBMS相比,它是MySQL的主要不足之一。 我强烈怀疑将来是否会看到MySQL中的窗口函数,尤其是在Oracle收购MySQL之后。 更新04/201

  • 问题内容: 在Haskell中,实现以下目标的最惯用的方法是: 或等效的Ruby: 显然,Python提供了与fold完全相同的功能,它是fold的一种实现,但是,有人告诉我,“ pythonic”编程方式是避免使用术语和高阶函数,而是尽可能使用列表理解。因此,有没有一种首选的方式来折叠列表或不是Python函数的类似列表的结构,或者是实现这一目标的惯用方式? 问题答案: 用Python方式对数组

  • 问题内容: 我希望我的JComboBox将多个选项组合在一起,类似于HTML : 我在Swing中找不到任何解决方案。为Combobox操纵UI渲染器似乎不是一个好主意,因为它依赖于OS和L&F(并且它们是私有的,因此无法扩展)。 问题答案: 考虑以下实现作为如何应用自定义样式和创建不可选择项目的基本指南:

  • 问题内容: 我已经用谷歌搜索,但无法找出什么是等效的。 这是我唯一能找到的(Swift的替代方法responsesToSelector:),但在我的情况下并没有太大意义,因为它检查了委托的存在,我没有委托,我只想检查是否存在新的API在设备上运行时是否返回,如果不是,则返回原先的api版本。 问题答案: 如前所述,在 大多数情况下,您可以使用可选的unwrapper运算符来实现所需的功能。这样,当

  • 根据POSIX.1-2008,头文件 定义了 1: 头应定义 、 、 、 、 、 、 、 、 和 类型,如 中所述。 当我试图在Linux系统上编译文件test.c中的上面的源代码时,就会发生这种情况: 当我指定任何-std选项时,为什么的定义不是revelead?