Windows 中相当于 sys/select.h 和 termios.h 中定义的功能的是什么

2023-12-03

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

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

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

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


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

termio.h

Windows 的终端 I/O 模型与任何 *nix 系统都非常不同。因此,实际上没有直接等效的termios.hheader 和它的朋友。

您想在 MSDN 上阅读有关 Windows 的信息通讯资源.

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

  • The DCB结构
  • The 通讯超时结构
  • BuildCommDCB()
  • SetCommState()
  • ... 还有很多 ...

一般来说,您会发现您需要直接处理更多的 Windows API,因为stdio会在进行设备 I/O 时增加混乱。

select.h

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

在 Windows 中,许多内核对象可以处于有信号状态或无信号状态,并且向对象发出信号的行为可用于释放调用WaitForMultipleObjects()。一些但不是全部HANDLE当数据可用时,对象会收到信号。具体来说,我知道HANDLEWinSock 的 s 有这个功能,但我不知道 Comm API。我知道HANDLEs 到一个打开的文件则不然。

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

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

然而,Windows 中内置了多种异步 I/O,可以替代对异步 I/O 的需要。select()通过改变设计。两者都需要大量使用无法与 C stdio 库结合使用的功能。

MSDN 有几篇关于 I/O 技术的文章以及大量示例:

  • 输入/输出概念
  • 同步和异步 I/O
  • 同步和重叠输入和输出
  • CreateFile()(特别是备注部分)

请注意,有关 Windows 如何工作的大部分信息都分散在 API 函数和结构参考材料的概述文章和备注部分中。这可能会给人这样的印象:第一次阅读时没有任何内容被完整记录。

使用 Cygwin 进行移植

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

Cygwin 已经做了相当多的繁重工作来构建select()它在 Windows 上运行,给定不同的打开文件描述符的混合。这个努力是用户指南中描述.

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

将 Cygwin 头文件与第三方工具头文件混合肯定会导致疯狂。

Edit:我重新安排了一些,并添加了一些材料来回应评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 中相当于 sys/select.h 和 termios.h 中定义的功能的是什么 的相关文章

  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 在 Plotly 中悬停/单击时更改整个迹线的颜色

    我在绘图中绘制了当前图形 下面的 jupyter 笔记本代码 并希望创建这样的效果 当您将鼠标悬停或单击每个迹线时 整个迹线将以不同的颜色突出显示 在本例中为红色 我尝试从 SOF 中实现这些示例 Python 中的 Plotly 如何突出
  • 根据泛型类型调度不同的函数

    我想编写一个函数 让我分派传入的泛型类型 我不关心运行时值 只关心编译时类型 const value any const x DateTime parseAs
  • 在 C++ 中以特定间隔速率调用方法

    这真的让我很恼火 因为我以前做过 大约一年前 我一辈子都不记得那是什么图书馆了 基本上 问题是我希望能够以指定的时间间隔调用某个方法一定次数或一定时间段 一个例子是我想从现在开始调用方法 x 10次 每0 5秒一次 或者 从现在开始调用方法
  • 当我们删除一个项目时,字典会调整大小吗?

    在Python中 当我们从字典中删除一个项目时 字典会调整大小还是重建字典表 从一些网站和博客中我了解到 当我们从字典中删除一个项目时 Python会在删除的键中插入一个虚拟键来填充字典条目 稍后 Python将通过调用一些清理函数来清理虚
  • 密钥库类型:使用哪一种?

    通过查看文件java security of my JRE 我看到默认使用的密钥库类型设置为JKS Here 有一个可以使用的密钥库类型的列表 有推荐的密钥库类型吗 不同密钥库类型的优点 缺点是什么 与您链接到的标准名称列表中列出的类型相比
  • 缩放以显示 bing 地图中的所有位置

    假设我有 3 个图钉 1 加利福尼亚州 2 佛罗里达州 3 纽约 为了让这三个人都可见 我必须缩小到足够远才能看到整个国家 但可以说我有 1 加利福尼亚州 2 内华达州 3 德克萨斯州 我必须缩小才能覆盖美国的西南角 Windows Pho
  • Derby 数据库表列名称格式在查询中不一致

    当查询 Derby 数据库时 我发现对于某些表 我必须双引号列名并使用表名来限定列名 但对于其他一些表 我不需要 这些表会发生什么 如何使所有表相同并且可以在没有双引号和表名限定符的情况下查询它们 我正在使用 NetBeans IDE 的
  • d3.js V3 力定向图和未链接的节点

    我正在做我的第一个数据可视化项目 更多的是为了练习 学习 d3 js 因为数据可视化是我感兴趣的 我的第一个项目是制作力向图 该数据集是与其毗邻州相关的 50 个州 源是州 目标是边界州 夏威夷和阿拉斯加没有接壤的州 如果我在 csv 文件
  • 无法在 NetBeans IDE 中建立与 MySQL 的连接

    当我使用 Hibernate 创建新的 Web 项目时 我打开新建连接向导 选择 MySQL 连接器 J 驱动程序 选项 连接器 jar 出现在驱动程序文件列表中 按下一步按钮 设置主机 127 0 0 1 端口 3306 数据库名称 用户
  • 单击时关闭菜单

    我想通过单击链接或单击菜单外部来关闭菜单 为了让事情变得美好和轻松 我不想使用 jQuery 我该怎么做
  • 如果 Int 不能为 null,那么 null.asInstanceOf[Int] 是什么意思?

    作为测试 我写了这段代码 object Ambig extends App def f x Int println Int def f x String println String f null asInstanceOf Int f nu
  • 乳胶打印单斜杠、反斜杠r、反斜杠n

    我希望 tex 文件中的以下行 按原样 打印 while tmp 0 r tmp 0 n tmp 当我将它包装在 verb 命令中时 如下所示 verb while tmp 0 r tmp 0 n tmp 它不起作用 我得到 Undefin
  • MS Access:将参数从一种访问形式传递到另一种访问形式

    我有一个表格和一个按钮 我想通过单击按钮打开另一个表单 并将参数从父表单传递到子表单 子表单的 RecordSource 有参数 我该怎么做 您可以通过引用表单的对象来引用调用表单的任何属性 我不会用 表单属性的符号 我讨厌它 所以如果你想
  • Reportlab - 将两个段落添加到一个表格单元格中

    我有一个表 其构建如下 styleN styles Normal data table row ID Some Information data append table row table row table row append Par
  • 动态添加后突出显示表格行

    看看如何在使用 jquery 动态添加表行后突出显示它 我的代码似乎添加行没有问题 但它没有突出显示正确的行 jquery opponents tr last after tr td data td td more data td tr e
  • 正则表达式删除单行 SQL 注释 (--)

    问题 谁能给我一个可以从 SQL 语句中删除单行注释的有效正则表达式 C VB NET 我的意思是这些评论 This is a comment 不是那些 this is a comment 因为我已经可以处理明星评论了 我做了一个小解析器
  • 如何在 TypeScript 中向日期、字符串、数组、数字等添加方法

    如何告诉 TypeScript 对日期 数字 字符串等本机类型的添加 例如 我想要编译以下内容 示例来自http sugarjs com dates var date Date Date create tomorrow I get a co
  • 如何重定向到子文件夹,然后将子文件夹链接重写到 htaccess 中的根目录?

    如果这个问题是重复的 我很抱歉 但我在网上查找的所有内容都让我很困惑 所以我再次发布这个问题来指定我的需求 因为我希望我的网站结构干净 所以我想将内容与配置分开 所以我将所有页面放在 app文件夹 很像 Rails 应用程序 网站的结构大致
  • AVX 与 SSE:预计会有更大的加速

    我预计 AVX 的速度比 SSE 快 1 5 倍左右 所有 3 个数组 3 个数组 16384 个元素 4 字节 元素 196608 字节 应适合 Intel Core CPU Broadwell 上的 L2 缓存 256KB 我应该使用任
  • Windows 中相当于 sys/select.h 和 termios.h 中定义的功能的是什么

    我在linux下有一个应用程序 编译成功 我想在 Windows 中运行相同的程序 但编译会产生以下与头文件相关的错误 找不到 sys select h 找不到 termios h 我怎样才能解决这个问题 Windows API 在结构和风