paul@mecazh.UUCP (Paul Breslaw) (02/20/90)
I have a little program that opens a master side pty and reads from it.
I have another little program that opens the corresponding slave side
and writes to it.
If the master side is coded something like:-
FILE *f;
char buf[ BF ];
int nr;
f = fopen( master, "a+" );
nr = fread( buf, sizeof( char ), BF, f );
then the program hangs on the fread.
If, however, I replace the last line with
nr = read( fileno( f ), buf, BF );
then the read succeeds. An optional
setbuf( f, NULL );
does not alter the situation.
I have tested the program on an HP9000/340 (HP-UX 6.5) and a
Sun3/50 (SunOS 3.5) with not quite identical non-events :-)
Any suggestions what I've done wrong?
Paul Breslaw
--
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Paul Breslaw, Mecasoft SA, | telephone : 41 1 362 2040
Guggachstrasse 10, CH-8057 Zurich, | e-mail : mcsun!chx400!mecazh!paul
Switzerland. | paul@mecazh.UUCPmeissner@osf.org (Michael Meissner) (02/21/90)
In article <378@node17.mecazh.UUCP> paul@mecazh.UUCP (Paul Breslaw) writes: | I have a little program that opens a master side pty and reads from it. | I have another little program that opens the corresponding slave side | and writes to it. | | If the master side is coded something like:- | | FILE *f; | char buf[ BF ]; | int nr; | | f = fopen( master, "a+" ); | nr = fread( buf, sizeof( char ), BF, f ); | | then the program hangs on the fread. Fread will loop attempting to fill the entire buffer. If your records are line oriented, I would recomend using fgets. If you need to get the characters as soon as possible, I would recomend switching the pty to CBREAK or RAW modes, and using getc() to read bytes as you need them. -- Michael Meissner email: meissner@osf.org phone: 617-621-8861 Open Software Foundation, 11 Cambridge Center, Cambridge, MA Catproof is an oxymoron, Childproof is nearly so