进程在读取时挂起

2023-12-28

以下代码通过管道从其他进程读取消息。所有进程都正确打印出所有消息,但它们将永远不会继续经过 while 循环。尝试在 Eclipse 中进行调试,在阅读完所有消息后,它将停止在 while 循环处。

索引是分配给每个进程的编号。第一个进程的索引 == 0。 消息本身只是发送消息的进程的索引。

while((n = read(fd[index][0], &mymsg, sizeof(int))) == sizeof(int))
        printf("process%d  has received a message from process%d\n", index, mymsg);

有什么想法为什么会发生这种情况吗?

以下是每个进程如何写入另一个进程:

// Write to other process
if(write(fd[index2][1], &index, sizeof(int)) != sizeof(int))
    sys_error(2);

如此进行五次。 fd是每个进程的读写端表。


致电给read()正在阻塞,直到出现更多数据。来自管道的手册页 http://linux.die.net/man/7/pipe

如果进程尝试从空管道中读取数据,则 read(2) 将 阻塞直到数据可用。如果一个进程尝试写入 满管道(见下文),然后 write(2) 阻塞,直到有足够的数据 已从管道中读取以允许写入完成。非阻塞 I/O 可以通过使用 fcntl(2) F_SETFL 操作来启用 O_NONBLOCK 打开文件状态标志。

打开每个文件描述符后,在进入 while 循环之前,对每个文件描述符执行以下操作:

fcntl(fd, F_SETFL, O_NONBLOCK);

但是,您确实应该阅读阻塞 I/O 与非阻塞 I/O 的比较,包括阅读 pipeline、read、fcntl 等的手册页。

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

进程在读取时挂起 的相关文章

  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • std::bind 重载解析

    下面的代码工作正常 include
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • 如何接受<>指定另一个键?或者更快的方法来区分两个巨大的 List<>?

    我有一个清单AE AlignedPartners数据库中的项目 我用以下方法检索 List
  • 电话号码无法在 IOS 模拟器上处理

    我正在为 IOS 开发一个基于phonegap的应用程序 该应用程序已经为Android开发完成 我在 html 页面上有以下链接 a href 0180123456789 a Android 设备可以正确解释它 如果我在 XCode 中的
  • 响应 NSNotifications 时,更新 UIViews 的最佳实践是什么

    由于 NSNotification 在主线程以外的线程上调用其选择器 因此我注意到您为响应该通知而对 UIView 或其他界面元素所做的任何更改通常都很难生效 如果主线程很忙 就像我的经常这样 这是最严重的 我可以通过调用 performS
  • 随机且唯一的子集生成

    假设我们有从 1 到 25 的数字 我们必须选择 15 个数字的集合 如果我没猜错的话 可能的集合是 3268760 在这 3268760 个选项中 您必须生成 100000 个 生成 100000 个唯一且随机的子集的最佳方法是什么 有没
  • T 树或 B 树

    T树算法描述于这张纸 http www vldb org conf 1986 P294 PDFT Tree是T tree的改进 可以更好地使用查询操作 包括范围查询 并且包含T tree的所有其他良好功能 该算法在论文 T tree A M
  • 使用 fields_for 时如何将范围应用于关联?

    我有一个包含许多任务的项目 每个任务都属于一个人 在我的项目编辑表单中 我允许编辑现有任务并使用嵌套对象表单工具添加新任务 http ryandaigle com articles 2009 2 1 what s new in edge r
  • 如何在iOS上使用代码截屏?

    如何以编程方式截取屏幕截图 您可以使用UIGraphicsBeginImageContext以此目的 例如 UIGraphicsBeginImageContextWithOptions self view bounds size self
  • 制作第三代iPad应用程序的注意事项

    我目前正在制作一个 iPad 应用程序 其中的视图是为 iPad 2 分辨率创建的 不过现在iPad已经出了双倍分辨率了 我也得支持一下 请直接告知要在应用程序中进行哪些更改才能支持 iPad 2 和第 3 代 iPad 我能想到的唯一方法
  • 使用 C# 和 UI Automation 获取未知控件类型的内容

    下图中有一个区域 其具有未知 自定义 类别 那不是网格或表格 我需要能够 选择该区域中的行 从每个单元格中获取一个值 问题是因为这不是一个常见的类型元素 我不知道如何用谷歌搜索这个问题或自己解决它 到目前为止 代码如下 Process pr
  • 交换结构体数组中的元素

    假设我有这个结构 struct MyStruct int iID int iMyNumber 然后我定义一个 MyStructs 数组 struct MyStruct msTest 3 我正在通过查看 ID 对类似于此的结构进行排序操作 现
  • 在 Nuxt.js (SPA) 中使用“

    我使用 nuxt js express 启动该项目 我们为 nuxt js 中的每个组件 vue 开发了样式 因此 在路由时 属性会叠加在同一个类名 样式 上 从而导致页面无法正常显示 1 样式范围 的正确用法是什么 2 或者路由过程应该是
  • 如何在 Notepad++ 中模仿 Visual Studio 的 CTRL-X、CTRL-V 功能?

    I m using Notepad for some projects and miss Visual Studio s Ctrl X Ctrl C functionality that cuts or copies the entire
  • 从另一个表单显示一个表单

    当我想通过单击另一个表单中的按钮来显示表单 C 时 我通常从要显示的表单创建一个对象并使用 show 方法 Form2 f2 new Form2 f2 Show 或者我与 所有者 一起工作 Form2 tempForm new Form2
  • 如何使用 WhenCustomCommandReceived 设置 Topshelf?

    我正在使用 Topshelf 创建一个 Windows 服务 ServiceClass 并且我正在考虑使用 WhenCustomCommandReceived 发送自定义命令 HostFactory Run x gt x EnablePau
  • 在使用 reticulate 创建的 virtualenv 中安装特定版本的 python 包

    使用时reticulate为了在 R 中使用 Python 我们可以通过命令创建一个 virtualenvreticulate virtualenv create指定 env 名称和 python bin 的路径 我们还可以将包添加到之前创
  • 将日期发布到 Web API 的正确方法?

    我正在从 Web API 读取数据并填充表单 当我将其提交回 Web API 时 出现以下错误 Message 发生错误 ExceptionMessage 属性 类型 MvcApplication1 Models ProductSale 上
  • 使此 WCF 客户端代码在 Mac 上的 Mono 和 MonoTouch 上运行?

    我试图让以下代码在 Mono 控制台应用程序中工作 并作为 MonoTouch 应用程序的最终目标 该代码在使用 Windows 控制台应用程序的 VS2008 下运行良好 当在 Mac 上将其作为 Mono 控制台应用程序运行时 我得到
  • 为 CoffeeScript 声明不同的编译路径

    我有一个 Scalatra 应用程序可以编译 CoffeeScript 使用https github com softprops coffeescripted sbt https github com softprops coffeescr
  • Spring MVC 打开PDF作为视图

    哪个 View 类适合渲染现有 PDF 抽象视图 我通过网络服务获取 PDF 所以我不打算子类 Abstract PdfView 来渲染 PDF 我想继续使用返回 ModelAndView 的 Spring 控制器类 这意味着编写我自己的
  • 进程在读取时挂起

    以下代码通过管道从其他进程读取消息 所有进程都正确打印出所有消息 但它们将永远不会继续经过 while 循环 尝试在 Eclipse 中进行调试 在阅读完所有消息后 它将停止在 while 循环处 索引是分配给每个进程的编号 第一个进程的索