中村 修
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 >>> ================== (ここで、入力待ちで停止) --