gpt4 book ai didi

c - 使用 C 程序启动和终止 cu

转载 作者:行者123 更新时间:2023-11-30 15:26:43 26 4
gpt4 key购买 nike

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

当我手动执行这些命令时“cu -l/dev/ttyS0 -s 115200”和“~”。 (就像 cu: ~. 的手册页中一样终止连接)一切正常。一个顺序程序,例如

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

不起作用,因为 cu 仍然处于事件状态,此后不会执行任何操作...程序只是坐在那里等待 cu...在简单的 bash 脚本中也会发生同样的事情...cu 会是阻止程序/脚本继续进行 - 这就是我使用线程的原因,就像我说的,我的实际程序可以工作,但程序没有像我希望的那样终止,并且必须重新启动终端。当我执行以下程序时,我只得到

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 进程,并留下一个文件描述符,您可以稍后在其中写入 ~.

关于c - 使用 C 程序启动和终止 cu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27313962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com