jack@cadre.dsl.PITTSBURGH.EDU (Jack Nelson) (06/04/89)
I have encountered behavior in BSD 4.3 and 2.10 which differs from
sys V, rel 3.2 behavior, and seems to me to be a bug. If this program
is run, and a letter or a few are input, the behavior is as expected:
the line gets printed out. If one now hits ^D (EOF) at the prompt, the
last line (or else just the prompt if there was no input after the
last prompt) spews out repeatedly until interrupted with ^C.
Under sysV, a ^D just reechos the last line, which seems more
reasonable.
Any ideas? Any workarounds?
#include <stdio.h>
main()
{
char line[128];
for (;;) {
printf("> ");
gets(line);
printf("line is %s\n",line);
}
}
John P. Nelson, M.D., 3811 O'Hara St, Pittsburgh, PA 15213, t:412-624-1769 Dept. of Psychiatry, U. of Pittsburgh
UUCP: { akgua | allegra | cmcl2 | idis | ihnp4 | mi-cec | pitt | psuvax1 | sun | sunrise | vax135 } ! cadre ! jack
ARPA: jack@cadre.dsl.pittsburgh.edu
--
John P. Nelson, M.D., 3811 O'Hara St, Pittsburgh, PA 15213, t:412-624-1769 Dept. of Psychiatry, U. of Pittsburgh
UUCP: { akgua | allegra | cmcl2 | idis | ihnp4 | mi-cec | pitt | psuvax1 | sun | sunrise | vax135 } ! cadre ! jack
ARPA: jack@cadre.dsl.pittsburgh.edumaart@cs.vu.nl (Maarten Litmaath) (06/06/89)
jack@cadre.dsl.PITTSBURGH.EDU (Jack Nelson) writes:
\... If one now hits ^D (EOF) at the prompt, the
\last line (or else just the prompt if there was no input after the
\last prompt) spews out repeatedly until interrupted with ^C.
\ Under sysV, a ^D just reechos the last line, which seems more
\reasonable.
It is indeed! The problem: some BSD developer introduced the `sticky EOF'
concept for stdio - once EOF has been encountered, the flag signaling this
condition won't be reset if more input is available, UNTIL clearerr() has
been called for the corresponding stream.
Note: you didn't test the return value from gets() - it will return (char *) 0
for EOF (or error; use ferror()/feof() to distinguish).
\...
\ for (;;) {
\ printf("> ");
\ gets(line);
\ printf("line is %s\n",line);
\ }
--
"Your password [should be] like your |Maarten Litmaath @ VU Amsterdam:
toothbrush." (Don Alvarez) |maart@cs.vu.nl, mcvax!botter!maart