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日程度かかるってな感じかな。

仕事の合間にでも、できそうですね。頑張ってみます。
有り難うございました。