Date: Thu, 8 Jun 2023 22:32:14 -0400 From: Paul Procacci <pprocacci@gmail.com> To: Aryeh Friedman <aryeh.friedman@gmail.com> Cc: "Dr. Nikolaus Klepp" <dr.klepp@gmx.at>, questions@freebsd.org Subject: Re: Slightly OT: non-buffered stdin in Java Message-ID: <CAFbbPuhvy=rtBU0iSJzyrxWdPYamXeFcGdBkUPYEvkLt46UyBA@mail.gmail.com> In-Reply-To: <CAGBxaXnVM=P%2B2r4o0UuEnOzhE6S9TTWbXyWFk2XGYqCsCdG44A@mail.gmail.com> References: <CAGBxaX=muu6JbMsdZbop7mYa-LetXPHvO8_=kMZtF%2BzSAdiBYA@mail.gmail.com> <202306082039.36831.dr.klepp@gmx.at> <CAGBxaXnq%2BU9C7=Vepc4Poq8LaZCo8DnkPpMH5UT70dUsKrG3bw@mail.gmail.com> <202306090036.42118.dr.klepp@gmx.at> <CAGBxaXnVM=P%2B2r4o0UuEnOzhE6S9TTWbXyWFk2XGYqCsCdG44A@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--000000000000f8923f05fda92dec Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jun 8, 2023 at 9:22=E2=80=AFPM Aryeh Friedman <aryeh.friedman@gmail= .com> wrote: > On Thu, Jun 8, 2023 at 6:37=E2=80=AFPM Dr. Nikolaus Klepp <dr.klepp@gmx.a= t> wrote: > > > > Anno domini 2023 Thu, 8 Jun 17:22:38 -0400 > > Aryeh Friedman scripsit: > > > On Thu, Jun 8, 2023 at 2:39=E2=80=AFPM Dr. Nikolaus Klepp <dr.klepp@g= mx.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 w= as > > > > > 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 fil= e > > > > > version of stdin > > > > > > > > > > > > > "stdbuf" might be what you look for: > > > > > > > > https://man.freebsd.org/cgi/man.cgi?query=3Dstdbuf > > > > > > 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 f= or > 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=3Dfcntl(STDIN_FILENO, F_DUPFD, 0); > int out=3Dfcntl(STDOUT_FILENO, F_DUPFD, 0); > char c=3D0; > > do { > read(in,&c,1); > write(out,&c,1); > } while(c!=3DEOF); > } > 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 --=20 __________________ :(){ :|:& };: --000000000000f8923f05fda92dec Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div><div dir=3D"ltr"><br></div><br><div class=3D"gmail_qu= ote"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, Jun 8, 2023 at 9:22=E2= =80=AFPM Aryeh Friedman <<a href=3D"mailto:aryeh.friedman@gmail.com">ary= eh.friedman@gmail.com</a>> wrote:<br></div><blockquote class=3D"gmail_qu= ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20= 4);padding-left:1ex">On Thu, Jun 8, 2023 at 6:37=E2=80=AFPM Dr. Nikolaus Kl= epp <<a href=3D"mailto:dr.klepp@gmx.at" target=3D"_blank">dr.klepp@gmx.a= t</a>> wrote:<br> ><br> > Anno domini 2023 Thu, 8 Jun 17:22:38 -0400<br> >=C2=A0 Aryeh Friedman scripsit:<br> > > On Thu, Jun 8, 2023 at 2:39=E2=80=AFPM Dr. Nikolaus Klepp <<a = href=3D"mailto:dr.klepp@gmx.at" target=3D"_blank">dr.klepp@gmx.at</a>> w= rote:<br> > > ><br> > > > Anno domini 2023 Thu, 8 Jun 14:01:19 -0400<br> > > >=C2=A0 Aryeh Friedman scripsit:<br> > > > > Under Java stdin (System.in) is a buffered stream not s= ent to the<br> > > > > application until return is pressed.=C2=A0 But, Java ca= n read from<br> > > > > files/sockets and other generic InputStreams unbuffered= .=C2=A0 =C2=A0So I was<br> > > > > wondering if there is a command that will make stdin go= to a file so<br> > > > > that Java can open that file and read it unbuffered?<br= > > > > ><br> > > > > I know I can do something like cat ->file but that m= akes it hard to<br> > > > > sync stdout and stderr (both are unbuffered in Java) wi= th the file<br> > > > > version of stdin<br> > > > ><br> > > ><br> > > > "stdbuf" might be what you look for:<br> > > ><br> > > > <a href=3D"https://man.freebsd.org/cgi/man.cgi?query=3Dstdbu= f" rel=3D"noreferrer" target=3D"_blank">https://man.freebsd.org/cgi/man.cgi= ?query=3Dstdbuf</a><br> > ><br> > > Will likely need to play with it more but stdbuf -i 0 -o 0 cat -|= cat<br> > > didn't produce the expected immediate echo I still had to hit= return<br> > ><br> ><br> > Your console is linebuffered, so "cat" receives lines. IIRC = "cat" disables linebuffer on input by itself, so you should use s= ometing else for testing.<br> ><br> > Nik<br> ><br> <br> I am pretty convinced by the following test it is not working as advertised= :<br> <br> aryehl@neomarx:~/Desktop % cat foo.c<br> #include <stdio.h><br> #include <fcntl.h><br> #include <unistd.h><br> <br> int main()<br> {<br> =C2=A0 =C2=A0 int in=3Dfcntl(STDIN_FILENO, F_DUPFD, 0);<br> =C2=A0 =C2=A0 int out=3Dfcntl(STDOUT_FILENO, F_DUPFD, 0);<br> =C2=A0 =C2=A0 char c=3D0;<br> <br> =C2=A0 =C2=A0 do {<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 read(in,&c,1);<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 write(out,&c,1);<br> =C2=A0 =C2=A0 } while(c!=3DEOF);<br> }<br> aryehl@neomarx:~/Desktop % !cc<br> cc foo.c<br> aryehl@neomarx:~/Desktop % stdbuf -i 0 -o 0 ./a.out<br> this is not echoing!<br> this is not echoing!<br> neither is this<br> neither is this<br> ^C<br> aryehl@neomarx:~/Desktop %<br> <br> -- <br> Aryeh M. Friedman, Lead Developer, <a href=3D"http://www.PetiteCloud.org" r= el=3D"noreferrer" target=3D"_blank">http://www.PetiteCloud.org</a><br> <br> </blockquote></div><br>stdbuf only works for stdio buffering of which read(= 2) and write(2) aren't.<br></div><div><br></div><div>~Paul<br></div><di= v><br><span class=3D"gmail_signature_prefix">-- </span><br><div dir=3D"ltr"= class=3D"gmail_signature">__________________<br><br>:(){ :|:& };:</div= ></div></div> --000000000000f8923f05fda92dec--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFbbPuhvy=rtBU0iSJzyrxWdPYamXeFcGdBkUPYEvkLt46UyBA>