Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何处理C++;,如果命令不存在';不只是打印结果,而是进入某种交互模式?_C++_C_Linux_Terminal - Fatal编程技术网

C++ 如何处理C++;,如果命令不存在';不只是打印结果,而是进入某种交互模式?

C++ 如何处理C++;,如果命令不存在';不只是打印结果,而是进入某种交互模式?,c++,c,linux,terminal,C++,C,Linux,Terminal,这个问题的灵感来自于 我已经理解了如何从C或C++代码中执行UTILS。但是,我们如何从某个命令中获得结果呢?该命令不只是打印结果,而是进入某种交互模式,直到我们按下Ctrl+z或类似的按钮为止?这种命令的示例是top,通常情况下您不会这样做。启动命令时,可以使用使命令不具有交互性的选项 从技术上讲,您可以从交互式终端界面获取信息,但您很难做到这一点,因为为了使界面更人性化,通常使用终端功能(termcaps、ncurses…),其基本工作原理是输出特殊字符,因此,你必须通过知道什么时候需要什么

这个问题的灵感来自于


我已经理解了如何从C或C++代码中执行UTILS。但是,我们如何从某个命令中获得结果呢?该命令不只是打印结果,而是进入某种交互模式,直到我们按下
Ctrl+z
或类似的按钮为止?这种命令的示例是
top

,通常情况下您不会这样做。启动命令时,可以使用使命令不具有交互性的选项


从技术上讲,您可以从交互式终端界面获取信息,但您很难做到这一点,因为为了使界面更人性化,通常使用终端功能(termcaps、ncurses…),其基本工作原理是输出特殊字符,因此,你必须通过知道什么时候需要什么来避开这些字符,所以除非界面非常简单和静态(实际上即使在这种情况下也是如此),否则这将是一件痛苦的事情。

一些应用程序(如“对话框”)可以交互工作,并将其最终结果写入不同的输出流。对于dialog,这是使用stderr完成的(默认情况下)。如果您可以控制应用程序,您可以提供类似的操作,将信息传回调用应用程序。

您只需访问stdin、stdout和stderr即可。在fork之前,根据需要创建管道,并在fork之后调用execv或任何其他变量

可以在此处找到一个示例:

还有一个常用的库,用于捕获子程序的输出,并对找到的项执行一些新操作。这个库最初是为TCL编写的,但也可以用于C和C++。

使用expect库周围的一些粘合代码,您的源代码可以如下所示:

int main()
{   
    Tcl_Interp *interp = Tcl_CreateInterp();
    Expect_Init(interp);

    // read from file
    int lfd = open( "test.txt", O_RDONLY );
    int fd = exp_spawnfd(lfd);

    // or read from application
    int fd ? exp_spawn("top","top", (char*)0)));

    bool cont= true;

    Expections set1 =
    {   
        { exp_glob, "YYY", []( Expection& exp)->void { cout << "found: YYY" << endl; }},
        { exp_regexp, "XXX ([0-9]+)", []( Expection& exp)->void { cout << "found: XXX" << exp.GetResult(1) << endl;}},
        { exp_glob, "END", [&cont]( Expection& exp)->void { cout << "EOF" << endl; cont = false; }}
    };

    int cnt = 0;
    do
    {   
        cout << "Run " << cnt << endl;
        cnt++; 
        Expect ( fd, set1, 2 );
    } while ( cont );

    cout << "Finish" << endl;

    return 0;

}
intmain()
{   
Tcl_Interp*Interp=Tcl_CreateInterp();
期望初始(interp);
//从文件中读取
int lfd=open(“test.txt”,仅限ordu);
int-fd=exp_-fd(lfd);
//或从应用程序中读取
int fd?exp_spawn(“顶部”、“顶部”、“字符*)0”);
bool cont=真;
期望集1=
{   

{exp_glob,“YYY”,[](Expection&exp)->void{cout So,在我的代码中获得CPU利用率的最佳方法是调用
ps auxw
,例如,将结果作为字符串获取,对其进行解析并按照某些标准进行排序?这并不能提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,例如有几个问题:我指出一个交互式应用程序可以在不同的输出上返回有用的信息,而不是用它来显示。上面的初始例子可能是用-B选项来回答的。C++的不完整例子需要澄清。(例如,为了说明stderr和stdout是如何组合的),这对于C/C++的原始问题没有用处。例如,对于C/C++,可以假设提问者已经知道popen。