gpt4 book ai didi

c - C 中 read() 和 fgets() 的区别

转载 作者:太空狗 更新时间:2023-10-29 16:50:50 27 4
gpt4 key购买 nike

我想从标准输入流中读取。使用 read() 或 fgets() 从标准输入流中读取有什么不同吗?

我附上了以下两段带有 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));

}
}

谁能说说原因。我还是觉得很难弄清楚

最佳答案

  • fgets是一个函数,read是一个系统调用
  • fgets 是标准 C,read 不是
  • fgets 是 stdio 缓冲的,read 不是
  • fgets 使用FILE *read 使用文件描述符
  • fgets 读取直到换行,read 读取你告诉它多少

需要更多?

关于c - C 中 read() 和 fgets() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6220093/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com