ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++实现expect

2021-01-01 21:02:40  阅读:315  来源: 互联网

标签:实现 c++ write tcl fd expect exp sizeof include


1.ubuntu12.04 32位

IDE:Clion

安装 sudo apt-get install tcl-devel expect-devel

----------------------------------------------------

2.main.cpp

-----------------------------------------------------

#include <tcl.h>
#include <expect.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <expect_tcl.h>
using namespace std;

int main(){
//    extern int exp_timeout;
//    exp_timeout = 1;
    Tcl_Interp *tcl;
    tcl = Tcl_CreateInterp();
    if (Expect_Init(tcl) != TCL_OK){
        puts("failure");
        return 1;
    }
    int fd = exp_spawnl("sudo","sudo","su",(char *)0);
    if(fd < 0){
        cout<<"Fail"<<endl;
        return -1;
    }
    int loop = 1;
    int result;
    char pas[] = "123\n";
    char cmd1[]="ls -lh\n";
    char cmd2[]="echo 好朋友\n";
    char cmd3[]="echo 我的好朋友\n";
    int flag=0;
    while(loop){
        result = exp_expectl(fd, exp_regexp, ".*assword.*", 1, exp_exact,"ℛ",2,exp_end);
//        result = exp_expectl(fd, exp_regexp, ".*assword.*", 1,exp_end);
        switch(result){
            case 1:
                write(fd, pas, sizeof(pas) - 1);
                break;
            case 2:
                if(flag==0){
                    write(fd, cmd1,sizeof(cmd1) - 1);
                    write(fd, cmd2,sizeof(cmd2) - 1);
                    flag=1;
                    break;
                }else if(flag==1){
                    write(fd, cmd3,sizeof(cmd3) - 1);
                    flag=2;
                    break;
                }else{
                    break;
                }
            case EXP_EOF:
                cout << "\nEOF";
                loop = 0;
                break;
            case EXP_TIMEOUT:
                cout<<"\nTime out";
                loop = 0;
                break;
        }
    }
    Tcl_DeleteInterp(tcl);
    return 0;
}

---------------------------------------------------

3.CMakeLists.txt

--------------------------------------------------

cmake_minimum_required(VERSION 3.13)
project(expTcl)
set(CMAKE_CXX_STANDARD 14)
link_directories(/usr/local/lib /usr/local/lib/expect5.45)
add_executable(expTcl main.cpp)
target_link_libraries(expTcl tcl8.4 expect5.45)

标签:实现,c++,write,tcl,fd,expect,exp,sizeof,include
来源: https://blog.csdn.net/weixin_50604476/article/details/112068483

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有