gpt4 book ai didi

C - 将标准输入/输出重定向到单个双向文件描述符

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:27 25 4
gpt4 key购买 nike

在某些情况下,例如在处理串行设备文件时,我能够打开双向文件描述符。但是,STDIN/STDOUT 是两个独立的单向文件。 是否可以从 STDIN/STDOUT 创建双向文件描述符? 我要求接口(interface)对称的目的:在编写需要同时readwrite< 的用户函数时,在处理标准管道时需要为两个方向(仅)指定一个文件描述符是不方便的。

有很多关于重定向 STDIN/STDOUT 的讨论(例如使用 dup2),但是这个讨论主要关注管道输入到/从子进程。我还没有找到任何关于将两个文件描述符合并为一个的信息。


编辑:这是问题的原始上下文。 我不关心解决这个特定问题;有很多解决方法。我想知道如何将两个单向 FD 组合成一个双向 FD。

我正在开发一个 C 实用程序来通过 Linux 上的 UART 控制一些奇特的电子设备,我想通过使用文件中的固定事务来测试我的代码的输入/输出。也就是说,我的模拟设备响应将来 self 预先创建并通过 STDIN 管道输入的文本文件,而发送的命令将转到 STDOUT 并保存到文件中。这将允许在连接真实电子设备之前进行交易验证,如果处理不当可能会发生故障。

最佳答案

[我不确定这是否会回答您的问题,我本来打算把它作为评论,但它太长了。]

在 Unix 和 Linux 中肯定有很多“双向”文件描述符的例子——串行端口和 TCP 流会立即浮现在脑海中。

如果你有其中之一,你可以通过使用 dupdup2 将其设置为 fd 的 0、1、 2。

最后,如果你是一个进程并且你相信你已经得到了一个双向 fd 作为 0、1 和 2,你可以只获取 0、1 或 2 并同时读取和写入它(即是,写入 0 或从 1 读取)。

但是如果 fd 的 0 和 1 不是彼此的克隆,我不知道有什么方法可以将它们“组合”成一个允许读写的 fd。


附录:如果您使用标准的 Unix 管道,您提到了携带两个文件描述符的麻烦。我认为标准管道的“双向”替代方案是 Unix 域套接字(显然现在称为 PF_LOCAL)。

关于C - 将标准输入/输出重定向到单个双向文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49036209/

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