我正在为bash shell搜索一个C接口。即我想有一组函数允许我打开一个会话,执行命令,返回输出(STDOUT,STDERR),最后关闭shell。它可以是基于标准库的库或C源代码。
答案 0 :(得分:1)
一般根问题似乎是如何以编程方式运行交互式终端程序。
现在我需要进行实际测试,但你需要
stdin
,stdout
和stderr
相对应的三个pipes(父流程写入stdin_pipe
并阅读stdout_pipe
和stderr_pipe
)使用pipe(2)
系统调用; dup2(2)
将标准输入,输出和错误重定向到上述管道的正确末端; execve(2)
/ execv(3)
)您的互动外壳; stdin_pipe
和reading来自其他两个管道的错误和响应。(如果您不需要区分stdout
和stderr
,可以使用popen(3)
简化您的生活 - 您可以将stderr
重定向到{ {1}}通过正确选择命令字符串)。
但是,对于正常工作的解决方案,我相信您可能需要通过调用pty(7)
而不是fork来使用伪ttys(forkpty(3)
)。
考虑到处理伪终端的所有问题,开始变得越来越复杂,为什么不搜索C expect库,它应该能够为你完成所有这些。或者模拟expect或其他语言如pexpect
的实现方式。实际上stdout
似乎为您提供了一个名为libexpect(3)
的C库,因此您无需编写tcl / tk来编写交互。我并不熟悉图书馆,可能还有其他更好的图书馆。
答案 1 :(得分:0)
您是否希望实现以下目标:
#include<stdio.h>
int main()
{
char a[1000];
gets(a);
system(a);
return 0;
}
输出:
./a.out
cat testing.c
#include<stdio.h>
int main()
{
char a[1000];
gets(a);
system(a);
return 0;
}
gets()
和system
调用可以进入循环。