I want to read from a stdin stream. Is there any difference in using read() or fgets() to read from the stdin stream.
I am attaching the following two pieces of code with fgets and read. With fgets I can use a java program to write and read from the c program easily. With read and write my java program hangs waiting for the output from C program which does not come.
I am just reading a line keeping it in buf and appending A to it.
Java program is able to talk to the following program which works with fgets and puts.
#include <stdio.h>
#include <string.h>
#define SIZE 200000
main()
{
int rc;
int df;
int i;
char buf[SIZE];
for(i=0;i<=120000;i++) {
memset(buf,'\0',SIZE);
if(!fgets(buf,SIZE-1,stdin))
continue;
strcat(buf,"A_A_A_A_A_A_A");
puts(buf);
}
}
but not with read() and write()
main()
{
int rc;
int df;
int i;
char buf[32768];
rc = fcntl(fileno(stdin), F_SETFL, O_NONBLOCK);
//rc = fcntl(fileno(stdout), F_SETFL, O_NONBLOCK);
FILE *fp;
for (;;)
{
int rc=-1;
memset(buf,'\0',32768);
//rc = fread(buf,5, 1, stdin);
rc = read(fileno(stdin),buf,32768);
if (rc > 0)
{
strcat(buf,"B_B_B_B_B_B_B_B_B");
write(fileno(stdout),buf,strlen(buf));
}
}
}
Could some one tell the reason. I am still finding it hard to figure out
fgets
is a function, read
is a system callfgets
is standard C, read
is notfgets
is stdio buffered, read
is notfgets
works with a FILE *
, read
works with a file descriptorfgets
reads until newline, read
reads how much you tell it toNeed more ?