[Gauche-devel-jp] read-char について

Back to archive index

中村 修 osm-n****@vesta*****
2004年 10月 17日 (日) 16:09:56 JST


中村といいます。

子プロセスに文字列を入力してそのままの出力を 親プロセスで
read-char で読んでいく(つもり)の以下のコードを実行すると、
以下が得られるのですが,同じ文字列が2回繰り返されて読まれていて、
なぜこうなるのかわかりません。与える文字列に”\n"が含まれないと、
この状況にはなりません。
なぜ、"\n" があると文字列が2回読み込まれてしまうのか、
教えていただけませんか?

(コード)
#!/usr/bin/env gosh
(use gauche.process)
(use gauche.termios)

(define tttt "abc\n")

(let* ((cmd "cat")
        (args (list cmd)))
   (receive
    (pid fd) (sys-forkpty)
    (if (= pid 0) ;; child
        (sys-exec cmd args '((0 . 0) (1 . 1) (2 . 2)))
        )
    ;; parent
    (let ((oport (open-output-fd-port fd :buffering :none))
          (iport (open-input-fd-port fd  :buffering :none)))

      (display tttt oport)

      (let loop ((c (read-char iport)) (str ""))
        (print "<<< " #`",str,c" " >>>")
        (print "==================")
        (loop (read-char iport) #`",str,c")
        )
      )))

(出力)
<<< a >>>
==================
<<< ab >>>
==================
<<< abc >>>
==================
  >>>
==================
<<< abc
  >>>
==================
<<< abc
a >>>
==================
<<< abc
ab >>>
==================
<<< abc
abc >>>
==================
<<< abc
  >>>
==================
<<< abc
abc
  >>>
==================
(ここで、入力待ちで停止)

-- 




Gauche-devel-jp メーリングリストの案内
Back to archive index