Re: Slightly OT: non-buffered stdin in Java
- Reply: Aryeh Friedman : "Re: Slightly OT: non-buffered stdin in Java"
- In reply to: Aryeh Friedman : "Re: Slightly OT: non-buffered stdin in Java"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 09 Jun 2023 02:32:14 UTC
On Thu, Jun 8, 2023 at 9:22 PM Aryeh Friedman <aryeh.friedman@gmail.com> wrote: > On Thu, Jun 8, 2023 at 6:37 PM Dr. Nikolaus Klepp <dr.klepp@gmx.at> wrote: > > > > Anno domini 2023 Thu, 8 Jun 17:22:38 -0400 > > Aryeh Friedman scripsit: > > > On Thu, Jun 8, 2023 at 2:39 PM Dr. Nikolaus Klepp <dr.klepp@gmx.at> > wrote: > > > > > > > > Anno domini 2023 Thu, 8 Jun 14:01:19 -0400 > > > > Aryeh Friedman scripsit: > > > > > Under Java stdin (System.in) is a buffered stream not sent to the > > > > > application until return is pressed. But, Java can read from > > > > > files/sockets and other generic InputStreams unbuffered. So I was > > > > > wondering if there is a command that will make stdin go to a file > so > > > > > that Java can open that file and read it unbuffered? > > > > > > > > > > I know I can do something like cat ->file but that makes it hard to > > > > > sync stdout and stderr (both are unbuffered in Java) with the file > > > > > version of stdin > > > > > > > > > > > > > "stdbuf" might be what you look for: > > > > > > > > https://man.freebsd.org/cgi/man.cgi?query=stdbuf > > > > > > Will likely need to play with it more but stdbuf -i 0 -o 0 cat -|cat > > > didn't produce the expected immediate echo I still had to hit return > > > > > > > Your console is linebuffered, so "cat" receives lines. IIRC "cat" > disables linebuffer on input by itself, so you should use someting else for > testing. > > > > Nik > > > > I am pretty convinced by the following test it is not working as > advertised: > > aryehl@neomarx:~/Desktop % cat foo.c > #include <stdio.h> > #include <fcntl.h> > #include <unistd.h> > > int main() > { > int in=fcntl(STDIN_FILENO, F_DUPFD, 0); > int out=fcntl(STDOUT_FILENO, F_DUPFD, 0); > char c=0; > > do { > read(in,&c,1); > write(out,&c,1); > } while(c!=EOF); > } > aryehl@neomarx:~/Desktop % !cc > cc foo.c > aryehl@neomarx:~/Desktop % stdbuf -i 0 -o 0 ./a.out > this is not echoing! > this is not echoing! > neither is this > neither is this > ^C > aryehl@neomarx:~/Desktop % > > -- > Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org > > stdbuf only works for stdio buffering of which read(2) and write(2) aren't. ~Paul -- __________________ :(){ :|:& };: