有没有更干净的方法来可靠地使用 write() 函数?

2024-03-04

我读了man页,我的理解是,如果write()失败并设置errno to EAGAIN or EINTR,我可以执行write()再次,所以我想出了以下代码:

  ret = 0;
  while(ret != count) {
    write_count = write(connFD, (char *)buf + ret,  count);
    while (write_count < 0) {
      switch(errno) {
        case EINTR:
        case EAGAIN:
          write_count = write(connFD, (char *)buf + ret,  count -ret);
          break;
        default:
          printf("\n The value of ret is : %d\n", ret);
          printf("\n The error number is : %d\n", errno);      
          ASSERT(0);
      }
    }
    ret += write_count;
  }

我正在表演read() and write()在套接字上并处理read()与上面类似。我正在使用 Linux,gcc编译器。


你有一个“不要重复自己”的问题 - 不需要两次单独的调用write,也不适用于两个嵌套循环。

我的正常循环看起来像这样:

for (int n = 0; n < count; ) {
    int ret = write(fd, (char *)buf + n, count - n);
    if (ret < 0) {
         if (errno == EINTR || errno == EAGAIN) continue; // try again
         perror("write");
         break;
    } else {
        n += ret;
    }
}

// if (n < count) here some error occurred
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有更干净的方法来可靠地使用 write() 函数? 的相关文章

  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • 如何使用鼠标手动放置 networkx 节点?

    我有一个相当大且混乱的节点网络 我希望尽可能整齐地显示它 This is how it s currently being displayed 首先 我尝试调整布局 看看它是否可以自动生成良好的输出 我尝试了许多不同的 nx 布局 但它们都
  • 谷歌应用程序引擎Python第一次上传应用程序

    我第一次尝试上传我的应用程序引擎项目 但我不知道为什么它不起作用 我的终端的错误是 me Desktop appcfg py update ProjectDir Application tacticalagentz version 1 Ho
  • 运行脚本来重命名 txt 文件中的几个单词

    我需要你的帮助 我的目录 文件夹 中有一个 txt 文件 需要运行脚本来重命名几个单词 例如 其中 LX4XAB 到 LX4xab XS3X44 到 Xs3x44 在哪里 另一个词 直到最后用另一个名称保存文件 你能帮助我吗 谢谢 干得好
  • Node 中express.js 和 axios.js 的区别

    我们使用axios来进行get post等http请求 我们也出于同样的目的使用快递 然而 根据我读到的内容 它们有不同的目的 请解释一下如何 PS 如果能举例说明就太好了 你可以将express js视为一个仓库 app get item
  • 从 LinkedHashMap 中检索值

    我有一个看起来像这样的对象 test1 get tags restcalls test2 put tags restcalls 我正在检索上面的对象 如下所示 HashMap json new ObjectMapper readValue
  • Java 2D 图像调整大小忽略双三次/双线性插值渲染提示(OS X + linux)

    我正在尝试使用 Image Voodoo 插件在 JRuby Rails 应用程序中为上传的图像创建缩略图 问题是调整大小的缩略图看起来像 屁股 似乎生成缩略图的代码绝对正确地执行了所有操作 将插值渲染提示设置为 双三次 但在我们的开发环境
  • 什么是 Firebase 远程配置开发者模式

    我正在将 Firebase 远程配置添加到应用程序中 但我对其用途感到困惑 setMinimumFetchIntervalInSeconds setDeveloperModeEnabled true false 文档讨论了开发人员模式 但我
  • 应用程序加载器:错误 ITMS-90502

    我正在尝试将新版本上传到 TestFlight 但应用程序加载器给出以下错误 错误 ITMS 90502 无效捆绑包 仅包含 arm64 的应用程序 切片列表中还必须有 arm64 Info plist 中的 UIRequiredDevic
  • MappedSuperclass - 更改子类中的 SequenceGenerator

    我将 JPA2 与 Hibernate 结合使用 并尝试为我的实体引入一个公共基类 到目前为止看起来是这样的 MappedSuperclass public abstract class BaseEntity Id private Long
  • iOS:在 swift 中将 UnsafeMutablePointer 转换为 String?

    正如标题所说 在 swift 中将 UnsafeMutablePointer 转换为 String 的正确方法是什么 lets say x UnsafeMutablePointer
  • 从 opening_hours 获取一天 Google 自动完成 API

    我需要从餐厅营业时间 自动完成 api 获取一天 我可以获得开放和关闭时间 但无法获得日期 这是我的代码 if place openingHours periods nil let period place openingHours per
  • 是否可以仅使用 C++ 制作 iPhone 应用程序? [复制]

    这个问题在这里已经有答案了 可能的重复 在 iOS 和 Mac OS X 应用程序中使用 C https stackoverflow com questions 8759573 utilizing c in ios and mac os x
  • Miniconda3:在当前 win-32 通道中找不到软件包匹配问题

    我一直在遵循如何安装 Miniconda3 并使用它来安装不同软件包的指南NumPy and SciPy 然而 安装 Miniconda3 并在 PyCharm 中打开一个新项目后 指南告诉我应该写 conda install numpy
  • C# 属性修改方法

    全部 也许我在谷歌上搜索得不够 但我找不到关于这个问题的任何例子 在 C 中是否可以创建一个自定义属性 该属性应用于类并修改其所有方法 例如 添加Console WriteLine Hello i m modified method 作为第
  • 如何仅在安装(而不是卸载)中执行自定义操作

    我确信这相当容易 但我有点困难 我有一个自定义操作 可以在安装时执行不同的 非 msi 安装程序 不幸的是 我注意到它还在卸载时执行安装程序 我已经查看了这些选项 但我似乎无法找到如何阻止这种情况 如果有人能帮助我 我将非常感激 另外 如何
  • SWI-Prolog 中的可逆谓词和字符串

    append 3是一个非常强大的谓词 假设我想要一个以相同方式工作但针对 SWI Prolog 字符串的谓词 我看到的最简单的方法是将这些字符串转换为列表string codes 2 然后应用append 3 然后使用string code
  • Pandoc md 到 pdf:在分页之前插入图像时保持顺序

    正如标题所述 我的问题是关于 pandocs md 到 pdf 的 当我像这样转换降价时 Title text that is about a 3 4 page image that is too large to fit page ima
  • 关于 GWT 中 MVP 的问题。 (总体概述)

    你们中的任何人都可以对 MVP 模式在 GWT 应用程序中的使用给出一个很好的解释吗 我看过的任何示例 我发现很难理解实现该模式的概念 诸如这是什么之类的问题 它实现了什么 它是如何实施的 以及如何扩展它以适应未来的修改 http code
  • 如何在javascript中获取所有待处理的http请求?

    javascript 或 angular2 有没有办法 获取待处理的 http 请求列表 目标是启动 其他几个进程 根据这个榜单的波动 是否存在类似可访问的请求堆栈之类的东西 Thanks 事实上你可以扩展Http类来拦截请求执行 impo
  • 有没有更干净的方法来可靠地使用 write() 函数?

    我读了man页 我的理解是 如果write 失败并设置errno to EAGAIN or EINTR 我可以执行write 再次 所以我想出了以下代码 ret 0 while ret count write count write con