From: Sam S. <sd...@gn...> - 2004-09-08 18:46:00
|
> * Bruno Haible <oe...@py...t> [2004-09-08 18:29:49 +0200]: > >> on solaris 64 bit and on linux amd I get >> >> $ nohup clisp foo.lisp >> $ cat nohup.out > > I don't observe this: I just get > WARNING: *FOREIGN-ENCODING*: reset to ASCII I observe it only over ssh and telnet, not on local xterms. >> 2. why does stream.d:make_terminal_io() create a terminal stream for >> input if output goes to a file? (and vice versa) > > On most systems (even on Unix, when using the readline library), > accessing the terminal's input requires special routines; they are > collected under the hood of the terminal-stream. > > In other words, if the user has redirected standard output, he is > expecting the input to still come from the same source as previously. 1. this issue turned out to be separate and independent from the nohup problem: when I apply the appended patch, I get *** - SYSTEM::SET-STREAM-EXTERNAL-FORMAT on #<IO TWO-WAY-STREAM #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/0"> #<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/1">> is illegal 2. apparently I was not clear enough. what I am trying to say is that the only reason to create a #<IO TERMINAL-STREAM> (as opposed to #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/0">) is to use readline. when output is redirected, the value of readline is dubious. when input is redirected, the value is readline is nil. so why not just create a regular buffered channel stream? i/o redirection indicates batch processing where the performance benefits of buffering outweigh UI benefits of readline. >> why is SYSTEM::SET-STREAM-EXTERNAL-FORMAT called? > > set_terminalstream_external_format is only called from the > *terminal-encoding* setter, You appear to set *terminal-encoding* > after clisp has started up?! Or what else are you doing? I am not doing anything with *terminal-encoding*. here is what I get right now (over ssh): $ rm -fv nohup.out; nohup clisp -q -norc .clisprc ; cat nohup.out removed `nohup.out' nohup: appending output to `nohup.out' *** - SYSTEM::SET-STREAM-EXTERNAL-FORMAT on #<IO TWO-WAY-STREAM #<IO TERMINAL-STREAM> #<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/1">> is illegal $ rm -fv nohup.out; nohup clisp -q -norc -i .clisprc -x '(1+ 2)' ; cat nohup.out removed `nohup.out' nohup: appending output to `nohup.out' ;; Loading file .clisprc ... *** - SYSTEM::SET-STREAM-EXTERNAL-FORMAT on #<IO TWO-WAY-STREAM #<IO TERMINAL-STREAM> #<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/1">> is illegal $ rm -fv nohup.out; nohup clisp -q -norc -x '(1+ 2)' ; cat nohup.out removed `nohup.out' nohup: appending output to `nohup.out' 3 $ i.e., this appears to be somehow related to LOAD. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> I want Tamagochi! -- What for? Your pet hamster is still alive! --- stream.d 06 Sep 2004 20:05:29 -0400 1.447 +++ stream.d 07 Sep 2004 12:03:41 -0400 @@ -14451,13 +14451,9 @@ var bool stdin_file = regular_handle_p(stdin_handle); var bool stdout_file = regular_handle_p(stdout_handle); if (stdin_file || stdout_file) { - var object stream = stdin_file /* input */ - ? make_standard_input() : make_terminal_stream(); - pushSTACK(stream); - stream = stdout_file /* output */ - ? make_standard_output() : make_terminal_stream(); + pushSTACK(make_standard_input()); /* Build a two-way-stream: */ - return make_twoway_stream(popSTACK(),stream); + return make_twoway_stream(popSTACK(),make_standard_output()); } return make_terminal_stream(); } |