加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

用于交互式bash的C接口

发布时间:2020-12-15 22:34:17 所属栏目:安全 来源:网络整理
导读:我正在为bash shell搜索一个C接口.即我想有一组函数允许我打开一个会话,执行命令,返回输出(STDOUT,STDERR),最后关闭shell.它可以是基于标准库的库或C源代码. 解决方法 一般根问题似乎是如何以编程方式运行交互式终端程序. 现在这在我的部分需要实际测试,但你
我正在为bash shell搜索一个C接口.即我想有一组函数允许我打开一个会话,执行命令,返回输出(STDOUT,STDERR),最后关闭shell.它可以是基于标准库的库或C源代码.

解决方法

一般根问题似乎是如何以编程方式运行交互式终端程序.

现在这在我的部分需要实际测试,但你大概需要

>使用pipe(2)系统调用创建对应于子进程stdin,stdout和stderr的三个pipes(父进程写入stdin_pipe并读取stdout_pipe和stderr_pipe);
> fork并在儿童close中通过拨打dup2(2)将标准输入,输出和错误重定向到上述管道的正确末端;
> exec(execve(2)/execv(3))你的互动外壳;
>启动writing命令到stdin_pipe和reading其他两个管道的错误和响应.

(如果你不需要区分stdout和stderr你可以通过使用popen(3)简化你的生活 – 你可以通过正确选择命令字符串将stderr重定向到stdout).

但是,对于正常工作的解决方案,我相信您可能需要通过调用forkpty(3)而不是fork来使用伪ttys(pty(7)).

由于考虑到处理伪终端的所有问题,它开始变得越来越复杂,为什么不搜索C期望库,它应该能够为你做所有这些.或者模拟如何实现expect或其他语言如pexpect.实际上期望似乎为您提供一个名为libexpect(3)的C库,这样您就不需要编写tcl / tk来编写交互.我个人并不熟悉图书馆,可能还有其他更好的图书馆.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读