C 中 read() 和 fgets() 之间的区别

2023-12-31

我想从标准输入流中读取数据。使用 read() 或 fgets() 从 stdin 流读取有什么区别吗?

我用 fgets 附加了以下两段代码并阅读。 有了fgets,我可以使用java程序轻松地编写和读取c程序。 通过读写,我的 java 程序挂起,等待 C 程序的输出,但 C 程序没有输出。

我只是读一行将其保存在 buf 中并在其中附加 A 。

Java 程序能够与以下使用 fget 和 put 的程序进行对话。

#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 is not
  • fgets是 stdio 缓冲的,read is not
  • fgets与一个FILE *, read使用文件描述符
  • fgets读取直到换行,read读取你告诉它多少
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中 read() 和 fgets() 之间的区别 的相关文章

随机推荐

  • C# DropDownList 样式的 ComboBox,如何设置文本?

    我想使用具有 DropDownList 样式的 ComboBox 使其看起来像一个按钮 因此您无法输入值 将值插入到文本框中 我希望组合框有一个名为 通配符 的文本标签 当我从列表中选择通配符时 所选值将插入到文本框中 并且组合框文本仍为
  • 使用 GNU Readline;如何在同一程序中添加 ncurses?

    标题比我的实际目标更具体一些 我有一个使用 GNU Readline 的命令行程序 主要用于命令历史记录 即使用向上箭头检索以前的命令 和其他一些细节 现在 程序的输出似乎散布在用户的输入中 有时是可以的 但输出是异步的 它通过网络连接响应
  • ListView CellFactory - 如何正确删除单元格?

    我有一个ListView我正在努力添加一个ContextMenu到 我有ContextMenu工作发现但有另一个问题 My setCellFactory代码 用于设置上下文菜单 lvAppetites setCellFactory lv g
  • 托管DLL和非托管DLL有什么区别

    我是新手 我真的很想知道两者之间的详细区别 以及何时使用它们 术语 托管代码 通常指用托管语言 例如 Java 或 C 编写的代码 术语 非托管代码 通常指用非托管语言 例如 C 或 C 编写的代码 如果您来自 NET 世界 托管 可能意味
  • Python客户端/服务器问题

    我正在用 python 做一个项目 我有一个客户端和一个服务器 服务器监听连接 一旦收到连接 它就会等待来自客户端的输入 这个想法是客户端可以连接到服务器并执行 ls 和 cat 等系统命令 这是我的服务器代码 import sys os
  • 如何从 .Net Core Web API 返回 Json?

    这是一个基本问题 我是 ASP Net Core 新手 因此我使用 Visual Studio 2017 中的模板创建了一个 Net Core Web API 项目 我想知道如何从 Get 函数返回 Json 字符串 提供的 Get 函数
  • Socket通信,Java客户端C服务器

    我正在尝试通过套接字与 Java 客户端和 C 服务器进行通信 如果我尝试在命令行上使用 nc 来连接服务器 或者如果我使用 nc 作为服务器并与我的 Java 客户端连接 那么一切似乎都工作正常 但是当我尝试连接 Java 客户端和 C
  • 如何从单列中获取值的组合?

    我正在尝试从 BigQuery 中的单列获取不同的可能组合值 假设我有这张表 date type payment customer no status 2019 01 02 Shirt Cashless 101 Cancel 2019 01
  • 在哪里放置 OBB 文件以在 Nexus 4 上测试 Android 扩展包文件 (OBB)?

    我正在尝试按照此处的指南测试 Android 中的扩展包文件 OBB http developer android com google play expansion files html http developer android co
  • 如何在 Android 平板电脑 Chrome 中隐藏工具栏以获得 100% 高网站

    我正在尝试制作一个 100 屏幕宽度和 100 屏幕高度 长宽比为 16 9 的 Web 应用程序 如果我能够在平板电脑上全屏查看该网站 那就太棒了 但不幸的是 屏幕上的工具栏占用了大量空间 使我的网站既不能以全高也不能以全宽显示 现在我知
  • 在项目中使用 ShareKit 时,本地化字符串并不总是有效

    因为我从我的应用程序中删除了一些本地化 所以我遇到了这个问题 第一次加载我的应用程序时 我在标签中看到我的密钥的本地化字符串 第二次加载应用程序时 出现 xxxxxkey 下次加载应用程序时 一切都很好 显示本地化字符串 怎么会这样 如果有
  • 如何在 Swift 包管理器中添加本地库作为依赖项

    如何在 Swift 包管理器中添加本地库 a 文件 作为依赖项 我尝试在我的 Package swift 中添加 dependencies Dependencies declare other packages that this pack
  • Google SignIn 在应用程序中,无需将其添加到设备帐户中

    我们一直通过 WebView 使用 Google 登录 但由于 Google 很快就会弃用此功能 是否有其他替代方法可以做到这一点 我们有一个稍微特殊的用例 我们的设备在仓库中使用 并且一台设备由多个用户使用 我们不希望所有用户将他们的帐户
  • UIBarButtonSystemItem PageCurl 不随工具栏改变颜色

    我想改变导航栏和工具栏的颜色 但是卷页系统图标的颜色UIBarButtonSystemItemPageCurl不随工具栏色调颜色改变 如果我使用书签等其他系统图标 它们会改变 有人有解决此类问题的方法吗 我使用以下几行来更改导航栏和工具栏的
  • 如果访问X86系统中不存在的物理地址怎么办?

    我正在开发一个 Linux 内核模块 它通过处理进程的页表将物理地址范围映射到进程虚拟地址空间 然后 我脑子里有一个问题 如果PTE指向一个不存在的物理地址会发生什么 例如 我的 X86 笔记本电脑有 8GB DRAM 如果 PTE 的值为
  • Flexbox div 不占据整个宽度

    我试图理解如何display flex有效 但每当我设置它时 孩子们都不会占据整个宽度 我预计三个 div 会占据屏幕宽度的 33 我究竟做错了什么 flexbox display flex flexbox div border 1px s
  • 创建一个 DateTimeOffset,设置为与服务器不同时区的午夜

    我有一个设置为 EST 的服务器 我想知道我需要做什么来创建设置为当天午夜但在不同时区的 DateTimeOffset 例如太平洋标准时间 获取相关的TimeZoneInfo 构造一个DateTime其中包含local时间 即午夜 Call
  • C++(11):如果两者都很好,何时使用直接初始化或复制初始化

    在重复的呼喊开始之前 我知道以下问题 以及其他一些问题 与此问题非常相关 在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a differ
  • 使用 android 捕获按键

    如何使用 android SDK 捕获手机按键 我已经环顾了几个小时没有找到任何东西 例如 在某些情况下 我想在用户按下手机上的 挂断 按钮时捕获消息 然后在消息到达操作系统之前将其丢弃 这可能吗 您可以处理视图中的关键事件 也可以处理整个
  • C 中 read() 和 fgets() 之间的区别

    我想从标准输入流中读取数据 使用 read 或 fgets 从 stdin 流读取有什么区别吗 我用 fgets 附加了以下两段代码并阅读 有了fgets 我可以使用java程序轻松地编写和读取c程序 通过读写 我的 java 程序挂起 等