stdinストリームから読みたい。read()またはfgets()を使用してstdinストリームから読み取ることに違いはありますか?
次の2つのコードをfgetsで添付して読み取ります。fgetsを使用すると、Javaプログラムを使用して、Cプログラムの書き込みと読み取りを簡単に行うことができます。読み取りと書き込みを行うと、Javaプログラムがハングし、Cプログラムからの出力が来ないのを待ちます。
私はそれをbufに保持し、それにAを追加する行を読んでいます。
Javaプログラムは、fgetsおよび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);
}
}
ただし、read()および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));
}
}
}
誰かが理由を教えてもらえますか。私はまだ理解するのが難しいと感じています