[英]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.