Re: psuedo termnal について
kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> 河野真治 @ 琉球大学情報工学です。
>
> 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 だと設定できない部分も
> あるので。
確かにそうですが、最初はraw modeにしようとsgttybやltcharsを
c_?flagやc_ccに書き換えてたので、stty rawのほうが早かったです。
> > 簡単ではないとなると、どのくらいの難易度なのでしょうか。
> > 学部の学生さんなら、たいていは書けるっていうくらいなら
>
> level 1 read/write を使った cat
> level 2 select を使った read のチェック
この辺りまでかな、cでかこうとするのは。
> level 3 read/writeを同時に使う非同期的なI/Oの扱い
> level 4 socket を使った IPC
ここら当たりはperlで書いてしまいます。
(こんがらがるのは、perlの裏方に任せてるからかもしれない)
> level 5 termios の扱い
> level 6 pty の扱い (IPCとtermiosの組合せ)
> ってな感じなんで、それぞれ1-2日程度かかるってな感じかな。
仕事の合間にでも、できそうですね。頑張ってみます。
有り難うございました。
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