2014-02-27 29 views
1

我有一個應用程序,我打開一個串行設備(GSM調制解調器),並創建一個僞終端。我想從串口設備讀取數據並過濾數據並通過僞終端發送,這樣其他進程就可以讀取它,就像它是一個簡單的「原始」串行線一樣。
ptFd - 僞終端文件描述符
devFd -僞終端和串行設備之間的奇怪字符替換

我使用的文件描述符串行設備posix_openpt(O_RDWR | O_NOCTTY)grantpt(ptFd)unlockpt(ptFd)的僞終端和大量的串行線路自定義設置的。對於第一次嘗試,我不會在這裏發佈,但如果它能幫助任何人解決這個問題,我會做。 我的問題是這樣的:

閱讀devFd:
056405c0020001009e59
閱讀PTFD:
5e45645e45c05e425e405e415e409e59
閱讀devFd:
056405c0020001009e59
閱讀PTFD:
5e45645e45c05e425e405e415e409e59

我寫的我從僞終端上的設備獲得的字節和:
個05變爲5e45
00變爲5e40
01變爲5e41
02變爲5e42
但是所有字節不以十六進制從0開始(> = 16小數)被轉移就好了。

首先......當我在一個僞終端上編寫程序並在同一個進程中讀取它時,它不應該反映我剛剛寫到的那些字節,對吧?
我不熟悉這些終端,但我想象我打開一個終端,獲取ptsname函數的奴隸的名字。從另一個進程中,我可以打開該名稱(如/ dev/pts/3),從這一點起,它可以用作'流'。

很可能我錯了,但請您給我一個簡短的說明?提前致謝。

回答

1

這與在終端按Ctrl + C時相似,^C被回顯。用於PTY等效的行爲是如果Ctrl + C鍵,即,0×03中生成的ASCII字符,被寫入到主,那麼它的回送作爲^C,0x5E×03。

通過取消設置終端屬性的c_lflag字段中的ECHOCTL標誌,可以關閉Ctrl + C和其他控制字符的此行爲。

您也可以通過取消設置ECHO標誌完全禁用回顯功能。 (我不知道你是否想這樣做,但我不清楚你在做什麼)

+0

'cfmakeraw'函數幫助我實現了我的目標,但是你的回答讓我感謝這個:)謝謝 –

相關問題