Issue
#include <stdio.h>
#define MAXLINE 4096
int
main(int argc, char **argv)
{
char *s;
char buf[MAXLINE];
s = fgets(buf, MAXLINE, stdin); // here, if replaced with read(0, buf, MAXLINE);
return 0;
}
Input is:12ctrl+d
fgets
doesn't return until input ctrl+d again(That is: 12ctrl+dctrl+d
). Why doesn't fgets return when it encounts the firstEOF
? It seems 12ctrl+d
doesn't work.But when
s = fgets(buf, MAXLINE, stdin);
is replaced withread(0, buf, MAXLINE);
read
will return(input is also: 12ctrl+d
).
Solution
Hitting CTRL+d on the terminal:
- simply means flush all the characters in
stdin
(the input buffer) immediately- it does NOT trigger an EOF condition on
stdin
(unless the current line/buffer is co-incidentally empty.)
So hitting CTRL+D while running a program,
- a blocked
fgetc()
will return if you do it twice consecutively.
1st = flush currently buffered characters,
2nd = flush empty buffer; i.e.EOF
condition is valid forfgetc()
and it returns. - a blocked
fgetc()
will return if you do it once on an empty-line.
flushes an already emptystdin
buffer, i.e.EOF
condition is valid forfgetc()
and it returns. - a blocked
read()
returns immediately as soon as the input is flushed.
Checkout the answers to this question for more details.
Answered By - TheCodeArtist Answer Checked By - Willingham (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.