Re: psuedo termnal について
河野真治 @ 琉球大学情報工学です。
そういえば、serial たたくだけなら pty はいらないです。
In article <avwtun9dxi.fsf@solaris.ozen.prv>, psbfan@po.harenet.ne.jp writes
> 出力に、0x00と\nが大量に吐き出され、そのあいだに、shellの出力のかがまりが
> なんども現れ、そのうち、overflowの合図らしきbeepがひたすら続きます。
うん。そんなものでしょう。0x00が大量に出るのは、pty のpadding
で出るのが正しい時もあります。
if((bytes = read(sfd, buf, sizeof buf)) == -1){ error and exit }
if((len = write(1, buf, bytes)) == -1) { error and exit }
だから、read してないときでも write にいっちゃうので、そうなります。
if((bytes = read(sfd, buf, sizeof buf)) != -1) {
write(1, buf, bytes);
}
ぐらい? (対処しないなら write のerrorみてもしょうがない...)
> > > tcgetattr ..etc.. tcsetattr
> > system("stty raw"); とかですませたりします。:-p
> なるほど。気づかなかった。
いや、setattr が正しいんですよ。stty raw だと設定できない部分も
あるので。
> これもよく聞く話ですが、なにせ、自分では簡単なものしか
> かかないので、debugでもっとこんがらがりそう。
tty の振舞いとかは調べてみないと良くわからないですよね。特に、
termios で、MIN とか TIME とかって、man みてもピンとこないで
しょうし。なので、gdb で動作を見るのは、お勧めです。
> 簡単ではないとなると、どのくらいの難易度なのでしょうか。
> 学部の学生さんなら、たいていは書けるっていうくらいなら
> 一通り、マスターしようと思うのですが。
level 1 read/write を使った cat
level 2 select を使った read のチェック
level 3 read/writeを同時に使う非同期的なI/Oの扱い
level 4 socket を使った IPC
level 5 termios の扱い
level 6 pty の扱い (IPCとtermiosの組合せ)
ってな感じなんで、それぞれ1-2日程度かかるってな感じかな。
結構、高度だと思う。
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735