【发布时间】:2018-07-10 06:15:33
【问题描述】:
我正在尝试通过 SSH 将命令发送到需要通过串行端口进行通信的远程系统。当我发送一个立即执行的命令时,一切正常,但是当我向运行我的程序的客户端发送一个命令时,该程序挂起并等待串行数据,我的其余 c 代码没有执行。我的代码如下所示。
FILE* remf = popen("ssh DestinationPC > remoteoutput.txt", "w");
if (!remf) { perror("popen ssh failed"); exit(EXIT_FAILURE); };
fprintf(remf, "./IOexpander \n");
fprintf(remf, "./Serial \n");
fclose(remf);
第一行 (./IOexpander) 工作正常并打开一些 LED。没有第二行,执行继续。但是当我添加第二行时(当我尝试运行任何不会立即终止的程序时),上面代码下面的行不会被执行。
如何在不等待客户端执行命令的情况下运行我的 c 程序? 在此先感谢:)
【问题讨论】:
-
可能是错误的方法。考虑改用libssh
-
popen是双向 IO 的错误方法。remoteoutput.txt的输出可能会以您无法控制的方式进行缓冲。给 ssh 命令行开关以强制分配给伪终端 might 帮助。此外,您可能还想捕获 stderr 输出并查看是否在那里打印了某些内容。但要使其健壮,您将需要 ssh 进程 stdin、stdout 和 stderr 的文件描述符,并且使用select/poll同时访问它们。除非这是学习练习,否则请按照建议使用库。