簡體   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