从终端访问数据
Access data from terminal
我必须写一个程序,从终端拦截数据,我必须解析它。当数据处理后,我必须在它进入stdout之前对其进行解析。
我不能使用tee
或prog > file 2>&1
之类的命令,因为程序将是交互式的。
例如:如果用户在终端中输入ls
,我必须解析它,然后它应该进入操作系统,然后当我得到处理后的结果时,我必须在它显示在终端之前再次解析它。
我做了我的研究,我认为我可以通过伪终端接口(pty)来实现。
请让我知道是否有更好的方法来实现它。我使用cpp
和bash
,平台是*nix
。
更新:我也可以从expect
使用libexpect
我不知道你在这里是什么意思-你的意思是交互式程序"在另一个终端与用户通信",甚至显示GUI?
它如何指定终端?这里的程序布局(哪个程序启动哪个程序)可能很重要。
如果你的应用程序使用GUI与用户通信,那么我会简单地这样做:启动bash时,将sdtin和stdout连接到管道,你的程序读取&写入到这些管道的末端,解析数据,并在它自己的标准输出上读写-因此它出现在它的终端上。
如果你的意思是控制不同的终端,而不是你的应用程序的终端,因为系统通常不希望程序在多个终端上运行。我不认为这是可能的过滤终端之间的通信和已经工作的应用程序附加到它。启动另一个进程生成另一个终端可能是一种选择-基本上有两个终端同步工作。但是你必须通过其他方式(命名管道,网络连接或其他IPC)同步两个进程。
如果你提供更多关于你的程序的细节,我可能会提供更多直接的帮助。
别告诉我你在写什么终端键盘记录器')
编辑:你的程序可能是基于GUI的-我建议的是类似于banuj链接的答案。
最好的选择可能是创建三个管道,然后fork,并在子进程中将管道的相应末端分配给stdin, stdout和stderr。然后子进程应该执行到shell -可能是bash,虽然我不确定如果大声读出其他shell是否会听起来更好;)主进程将能够读写上述管道的其他端,解析bash和它运行的程序的输入和输出。您也可以直接执行用户指定的命令,但这迫使您接管shell的繁琐工作-管理当前目录,环境变量,作业控制等。
使用上述方法可能会引起一些麻烦-某些程序(通常在安全相关的上下文中),例如。无论如何,Su (do)请求密码将尝试绕过stdin/stdout,直接从终端设备读取。我不知道在这种情况下你能做什么——编程你自己的终端模拟器将是一个选择,但我不知道你是否想要深入到这个系统编程。
如果你想要一些代码片段,如果你不知道怎么做,就问;)
- 用于访问容器<T>数据成员的正确 API
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- OpenCV C++ 3 维垫数据访问错误值
- 用于随机数据访问的最有效文件类型
- 用于多维数据访问的重载 () 运算符
- MEX C++原始数据访问
- C++数据访问基准
- 随机 mmaped 内存访问比堆数据访问慢 16%
- 共享内存多线程和数据访问
- 如何使用常见的C 业务逻辑和数据访问层构建跨平台移动应用程序
- 链表数据访问
- OpenMP线程、数据访问延迟和STL数据容器
- C++ 矢量数据访问
- 我很难在C++类中实现我想要的数据访问
- 概括模型中的数据访问.避免宏观的方法
- 矢量化/优化循环,用于宽寄存器(特别是Xeon Phi)的未对齐数据访问
- 松类耦合和数据访问
- 在Linux上锁定对单个进程内数据访问的最快方法
- 如何使用数据访问对象进行序列化和关系数据库数据访问