普通网友 2015-04-29 02:19 采纳率: 19%
浏览 2462

win7通过串口连接linux外设后,如何登录root用户?

我想自己做一个MFC小工具,功能可以概括为"简易版secureCRT";
现在串口已经通过CreateFile()连接成功,超时、奇偶校验、波特率这些设置貌似也没有问题了。
接下来,我如何得到linux的login:和password:提示符并把用户名root和密码发出去?如何远程打开一个终端从而可以向内核发送linux命令(比如ls、cd这些)?
贴上部分代码吧:

 BOOL Cserial_comm_win_1Dlg::OnInitDialog(){
    CDialogEx::OnInitDialog();

    // TODO: 在此添加额外的初始化代码
    hCom=CreateFile(_T("\\\\.\\COM19"),                 //COM1口 
                    GENERIC_READ|GENERIC_WRITE, //允许读和写 
                    0,                          //独占方式 
                    NULL,                       //引用安全性属性结构,缺省值为NULL
                    OPEN_EXISTING,              //打开而不是创建 
                    0,                          //同步方式 0
                    NULL); 
    if(hCom==(HANDLE)-1){ 
        AfxMessageBox(_T("打开COM失败!")); 
        return FALSE; 
    }

    SetupComm(hCom,1024,1024);                  //输入缓冲区和输出缓冲区的大小都是1024 
    COMMTIMEOUTS TimeOuts; 
    //设定读超时 
    TimeOuts.ReadIntervalTimeout=MAXDWORD;      //在读一次输入缓冲区的内容后读操作就立即返回,而不管是否读入了要求的字符。
    TimeOuts.ReadTotalTimeoutMultiplier=0; 
    TimeOuts.ReadTotalTimeoutConstant=0; 

    //设定写超时 
    TimeOuts.WriteTotalTimeoutMultiplier=100; 
    TimeOuts.WriteTotalTimeoutConstant=500; 
    SetCommTimeouts(hCom,&TimeOuts);            //设置超时 

    DCB dcb; 
    GetCommState(hCom,&dcb); 
    dcb.BaudRate=115200;                            //波特率为9600 !!!!!!!!!!!!
    dcb.ByteSize=8;                             //每个字节有8位 
    dcb.Parity=NOPARITY;                        //无奇偶校验位 
    dcb.StopBits=1;                 //TWOSTOPBITS两个停止位 !!!!!!!!!!!!!!!
    SetCommState(hCom,&dcb); 
    PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);//清除串口句柄的输入输出缓冲区
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void Cserial_comm_win_1Dlg::OnBnClickedButton1(){//“发送”按钮
    // TODO: 在此添加控件通知处理程序代码
    CString command;
    GetDlgItemText(IDC_EDIT1,command);

    char lpOutBuffer[100]; 
    memset(lpOutBuffer,0,100);

    int strLength= command.GetLength() + 1;
    strncpy(lpOutBuffer,command,strLength);

    DWORD dwBytesWrite=100; 
    COMSTAT ComStat; 
    DWORD dwErrorFlags; 
    BOOL bWriteStat; 
    ClearCommError(hCom,&dwErrorFlags,&ComStat); 
    bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,& dwBytesWrite,NULL); 
    if(!bWriteStat){ 
        AfxMessageBox(_T("写串口失败!"));
    }
}


void Cserial_comm_win_1Dlg::OnBnClickedButton2(){//“接收”按钮
    // TODO: 在此添加控件通知处理程序代码
    char str_s[100]; 
    memset(str_s,'\0',100); 
    DWORD wCount=100;//读取的字节数 
    BOOL bReadStat; 
    bReadStat=ReadFile(hCom,str_s,wCount,&wCount,NULL); 
    if(!bReadStat) 
        AfxMessageBox(_T("读串口失败!"));
    PurgeComm(hCom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); 
    CString str;
    str=str_s;
    SetDlgItemText(IDC_EDIT1,str);
    UpdateData(FALSE); 
}


图片说明
目前的界面很简单,我想通过文本框获取命令输入,返回的字符串简单地在文本框呈现。不知这想法是否可行,请大神指点一二

  • 写回答

3条回答

  • 普通网友 2015-04-29 03:26
    关注

    没有人回答么。。。
    secureCRT是如何把串口输入输出缓冲区的内容“实时”映射到界面文本框的?
    真是想不通啊!!~~~~~
    我发送任何命令,输出缓冲区都读不到任何内容,这是怎么回事啊

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算