您尚未登录。

楼主 #1 2018-03-20 18:52:45

zhen8838
会员
注册时间: 2018-01-19
已发帖子: 32
积分: 32

求助!同一程序,使用不同终端软件去执行结果不同。

1.问题描述
  我在qt中写了一个程序,在v3s中读取gps数据并对其进行处理。我在qt上已经搭建好了交叉编译环境以及目标板配置。并且之前测试了几个小程序,都可以点击运行并且在qt的输出栏中查看程序输出。
  但是这个程序有所区别,我在qt中执行会出现如下现象
Deepin_Scrot_0544.png
  然后我用普通ssh软件登录进去之后,执行该程序,是这个结果是
20180320184401.png

现在发现问题是检测打开的文件是否是串口时发生错误。
  接下来我找到了出错的代码段:

int UART_Open(int fd,char* port)
{

    fd = open( port, O_RDWR|O_NOCTTY|O_NDELAY);//非阻塞,读写,无流控
    if (FALSE == fd)
    {
        perror("Can't Open Serial Port");
        return(FALSE);
    }
    //恢复串口为阻塞状态
    if(fcntl(fd, F_SETFL, 0) < 0)
    {
        printf("fcntl failed!\n");
        return(FALSE);
    }
    else
    {
        printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));
    }
    //测试是否为终端设备
    if(0 == isatty(STDIN_FILENO))//**********此处为出错代码段**************
    {
        printf("standard input is not a terminal device\n");
        return(FALSE);
    }
    else
    {
        printf("isatty success!\n");
    }
    printf("fd->open=%d\n",fd);
    return fd;
}

目前我的程序就是主程序进入后立即打开串口,我实在想不通为何用qt启动和别的ssh软件登录启动会导致isatty函数返回值出现不同?请大家不吝赐教。
以下是我的qt远程主机配置
Deepin_Scrot_0544.png

离线

#2 2018-03-20 20:46:54

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

我感觉在 Qt里面ssh服务器并没有启动虚拟tty引起,
纯属根据这个网贴猜测: what-is-pseudo-tty-allocation-ssh-and-github





离线

#3 2018-03-20 21:06:05

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

找到了某个版本 QtCreator的代码, sshremoteprocess.cpp

Objects are created via SshConnection::createRemoteProcess.
    The process is started via the start() member function.
    If the process needs a pseudo terminal, you can request one
    via requestTerminal() before calling start().
    Note that this class does not support QIODevice's waitFor*() functions, i.e. it has
    no synchronous mode.



    对象通过SshConnection :: createRemoteProcess创建。
    该过程通过start()成员函数启动。
    如果进程需要伪终端,则可以请求一个
    通过调用start()之前的requestTerminal()。

我感觉 start() 之前没调用 requestTerminal(), 导致并没有伪终端.





离线

#4 2018-03-20 21:10:42

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

然后找到 sshremoteprocessrunner.cpp

if (d->m_runInTerminal)
        d->m_process->requestTerminal(d->m_terminal);
    d->m_process->start();

确实这里有条件(m_runInTerminal)调用了 requestTerminal()





离线

#5 2018-03-20 21:15:40

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

QQ20180320211501.png

会不会是这里问题?





离线

楼主 #6 2018-03-20 21:22:25

zhen8838
会员
注册时间: 2018-01-19
已发帖子: 32
积分: 32

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

晕哥 说:

这里写这些吗?我写了感觉好像没有用
Deepin_Scrot_0544.png
我发现我这个5.10版本好像没有run in terminal 这个选项,
Deepin_Scrot_0544.png
难道是要设置什么参数吗。我测试别的代码还是没啥问题。。

最近编辑记录 zhen8838 (2018-03-20 21:25:44)

离线

#7 2018-03-20 21:29:08

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

那应该界面上还有一个 Terminal 的参数可以设置才对





离线

楼主 #8 2018-03-20 21:34:41

zhen8838
会员
注册时间: 2018-01-19
已发帖子: 32
积分: 32

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

晕哥 说:

那应该界面上还有一个 Terminal 的参数可以设置才对

这个好像没看到。。
Deepin_Scrot_0544.png

离线

#9 2018-03-20 21:41:42

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

再看下这个 sshkeydeployer.cpp

d->deployProcess.run(command, sshParams);

remotelinuxpackageinstaller.cpp

d->installer->run(cmdLine.toUtf8(), deviceConfig->sshParameters());
d->killProcess->run(cancelInstallationCommandLine().toUtf8(), d->deviceConfig->sshParameters());

remotelinuxcustomcommanddeployservice.cpp

d->runner->run(d->commandLine.toUtf8(), deviceConfiguration()->sshParameters());

从上面看均是调用 sshremoteprocessrunner.cpp
run()  而不是 runInTerminal(),
所以我觉得QtCreator这个软件ssh调试有可能根本没有开虚拟终端。





离线

#10 2018-03-20 21:46:16

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

zhen8838 说:
晕哥 说:

那应该界面上还有一个 Terminal 的参数可以设置才对

这个好像没看到。。
https://preview.ibb.co/dA6ypc/Deepin_Scrot_0544.png

根据上面帖子,远程调试是否启用终端貌似被硬编码了。





离线

楼主 #11 2018-03-20 22:13:18

zhen8838
会员
注册时间: 2018-01-19
已发帖子: 32
积分: 32

Re: 求助!同一程序,使用不同终端软件去执行结果不同。

好的,谢谢晕哥的解答。我再去找找是否有其他可配置的选项。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn