繁体   English   中英

用C程序启动和终止cu

[英]start and terminate cu with a C program

我正在尝试使用cu通过ttyS0与另一个UNIX设备进行通信(使用Google“ cu unix”以了解有关cu的更多信息)。 我的程序运行正常,但是问题是,在第一次执行该程序(建立连接,读取日志文件和其他内容)之后,无法再访问该终端。 我刚刚在简化的代码版本中发布了问题的核心,我只关注我遇到的实际问题:

当我手动执行以下命令时,分别为“ cu -l / dev / ttyS0 -s 115200”和“〜”。 (就像在cu:〜。的手册页中那样终止连接),一切正常。 像这样的顺序程序

system("cu -l /dev/ttyS0 -s 115200");
system("~.");

不能正常工作,因为cu仍然处于活动状态,此后什么也不执行。...程序只是坐在那里等待cu ...在简单的bash脚本中也会发生同样的事情... cu会阻止该程序/ script从头开始-这就是为什么我使用线程,就像我说的那样,我的实际程序可以工作,但是该程序并没有像我想要的那样终止,并且必须重新启动终端。 当我执行以下程序时,我只会得到

Connected
sh: ~.: not found

按Enter

cu: can't restore terminal: Input/Output error
Disconnected

并且无法使用的终端保持打开状态(无法键入或执行任何操作)...

#define _BSD_SOURCE
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <stdlib.h>
#include <pthread.h>

void first(){
    system("cu -l /dev/ttyS0 -s 115200");
    pthread_exit(NULL);
}
void second(){
    system("~."); //also "~.\n" isn't changing anything
    pthread_exit(NULL);

int main(){
    pthread_t thread1, thread2;
    pthread_create ( &thread1, NULL, (void*)first, NULL );
    sleep(3);
    pthread_create ( &thread2, NULL, (void*)second, NULL );
    sleep(4);

    exit(0);
    return 0;
}

当您手动操作时, ~. 您输入的内容不是系统命令,而是作为仍在运行的cu进程的输入。 最好的证明是您当时没有shell提示。

因此,等效方法不是执行另一个system("~.")而是将这些字符作为输入传递给第一个system("cu ...") 例如:

system("echo '~.' | cu ....");

显然,这不允许您打开“ cu”连接并发送“〜”。 晚些时候。 如果您希望这样做,建议您看一下popen命令( man 3 popen )。 这将启动cu进程,并为您提供一个文件描述符,您可以在其中写入~. 晚些时候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM