[Happy Coding] 关于system/exit/wait的解释

[Happy DSA] 图像的contour trace算法C++实现 问题提出: 给定一个二维图像,基于某个threshold,来提取contours。 在图形图像学中,这个问题有比较好的解决方案,google "coutour trace",可以得到以下2个比较好的参考文献: 1. http://en.wikipedia.org/wiki/Moore_neighborhood 2. http://www.imageprocessingplace.com/d 阅读详情
关于system/exit/wait的解释

先看下面的代码段:

static int system2(const char *command)
{
    pid_t pid; 
    int status;

    pid = fork();

    if (pid == 0) { 
    int null = open("/dev/null", O_RDWR);
    dup2(null, 0);
    dup2(null, 3);
    if (null > 2) close(null);
    if (null == 3)
        fprintf(stderr, "fd3 is closed in the forked process\n");
    status = system(command);
    if (null <= 2) close(null);
    _exit(WEXITSTATUS(status));
    }    
    for(;;) {
        pid = waitpid(pid, &status, 0);
        if (pid < 0) { 
            perror("waitpid");
            fprintf(stderr, "Unexpected error: waitpid: %s", strerror(errno));
            status = -1;
        } else if (WIFSTOPPED(status)) {
            continue;
        }
        break;
    }
    return status;
}

上面代码中,waitpid返回的status中,共有16位,高8位代表子进程退出码(0-255,0代表正常退出,非0一般是非正常退出),低8位代表子进程的原因,是信号触发,还是自己正常退出(0为正常退出,0x7F为STOP,0x80为KILL强行退出)。

所以WIFSTOPPED这个宏就是用来判断第8位是否为0x7F。

子进程调用system函数,然后期望将system的返回码(孙子进程退出状态)进一步返回给父进程。system的返回值应该也有16位信息,高8位为退出码,低8位为退出原因。在将这个孙子进程的退出状态返回给父进程时,调用了_exit()函数,这时,需要提取高8位,所以得用宏WEXITSTATUS。

上面宏的有关定义如下:

#define WEXITSTATUS(s) (((s) & 0xff00) >> 8)
#define WCOREDUMP(s) ((s) & 0x80)
#define WTERMSIG(s) ((s) & 0x7f)
#define WSTOPSIG(s) WEXITSTATUS(s)
#define WIFEXITED(s) (WTERMSIG(s) == 0)
#define WIFSTOPPED(s) (WTERMSIG(s) == 0x7f)
#define WIFSIGNALED(s) (WTERMSIG((s)+1) >= 2)

最后从system2的返回值,期待跟原生system的返回值类似,具有退出码和退出原因,以便客户端代码进一步用相关宏来判断。


[Effective WX] wxAUIManager在GTK实现上的一些问题 1. wxAUINoteBook wxAUINoteBook,内置一个wxAUIManager,用来管理所有的pages. 如果创建一个notebook,然后将其添加到上层的auimanager中: m_pToolsNotebook = new wxAuiNotebook(this, ID_TOOLSPANE_NOTEBOOK); this->GetAuiManager( 阅读详情

相关推荐

AltiumDesigner.zip

AltiumDesigner.zip

langchain AI应用框架研究【核心概念-篇一】

langchain新版本1.1.0 出来了,老板了的api看了一些,api写法看起来有些凌乱,特别是那个构造chain的地方,先后顺序感觉不好记忆,还是SpringAI相对好好记忆一些。不知到1.x版本的会好使一些不。我们先来看看新版的langchain、langgraph、deepagents。LangChain 是一个用于开发由大语言模型(LLM)驱动的应用程序的开源框架。它的核心目标是提供一个统一的抽象层,让开发者可以方便地组合各种组件,而无需关心底层与不同模型API对接的细节。

yanghuashuiyue的专栏 601

YOLO26算法日历数字识别+训练好的模型+102张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[数字(number)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 97 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9156** mAP50-95 | 0.7374 Precision | 0.8626 Recall | 0.8381 train/box_loss | 0.8790 train/cls_loss | 0.7499 val/box_loss | 0.7874 val/cls_loss | 0.6025 【训练过程分析】 训练开始后,我注意到前几轮的 loss 下降特别快,这让我有点兴奋,但随着训练的深入,loss 的降幅变得不那么明显了。在训练的第 30 轮左右,val_loss 开始趋于平稳,这让我稍微放心了一些,但同时也感觉压力倍增,因为一旦训练过早平稳,就容易陷入过拟合的泥沼。经过 97 轮的磨炼,最终 mAP50 达到了 0.9156,这让我松了一口气。不过,mAP50-95 仅有 0.7374,和 mAP50 之间有明显的差距,说明模型在低置信度的检测上还需要优化。从 loss 曲线来看,训练过程总体上比较平稳,没有明显的过拟合迹象,但也让人觉得有些枯燥。我心想,要是能早点找到一个陡峭上升的训练曲线该有多好,这样至少能让人心态更积极一些。 随着训练进行到后半段,模型开始逐渐收敛,但这个过程并不是一帆风顺的。在训... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

[Happy Coding] 一个正则表达式,支持逻辑和关系运算符组成的表达式计算

I. 写一个正则表达式,要求判断一个数是否满足以下条件: >= val1 && 1. val1和va2要求支持浮点数; 2. 支持>, >=, 3. 支持&&, ||, and(不区分大小), or(不区分大小写)逻辑运算 1) 有效的浮点数的正则表达式如下: ([+-]?\d+(\.\d+)?|0?\.\d+) 支持+/-m.n, m.n, .n, 不支持m. 2) 关系

zeroom的技术专栏 1万+

风储VSG-基于虚拟同步发电机的风储并网系统Simulink仿真

内容概要:本文介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,聚焦于隔离型全桥LLC谐振变换器的建模、仿真与参数设计,涵盖其在电力电子系统中的关键应用,如软启动、闭环控制、变频控制及效率优化等。该模型支持对LLC变换器在不同工作模式下的动态响应与性能表现进行深入研究,适用于探究谐振拓扑结构、磁性元件设计、谐振参数匹配以及先进控制策略的科研与工程实践。同时,文档配套提供了仿真模型、设计报告与计算书等完整资料,强化了其实用性与教学价值。; 适合人群:具备电力电子、自动化或电气工程等相关专业背景,从事电力电子变换器研发、系统仿真与控制算法设计的科研人员、工程师及研究生。; 使用场景及目标:①用于全桥LLC谐振变换器的建模、仿真与动态性能分析;②支持对软启动过程、闭环稳压控制、变频调谐及效率优化等核心技术的研究与教学;③为电力电子电源系统的工程设计、参数优化与控制策略验证提供高精度仿真平台。; 阅读建议:建议结合Plecs或Simulink等仿真工具进行动手实践,重点理解电路拓扑构建、谐振参数计算、控制器设计与系统稳定性分析,并配合文档中的设计报告与计算书,系统掌握从理论到仿真的完整流程。

国央企创新负责人如何通过平台实现科技创新资源的系统集成与高效配置?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

[Effective WX] win7上的wxFileDialog的默认路径问题分析与解决

wxFileDialog是wxWidget库的一个类(关于wxWidget库,可以参考 http://www.wxwidgets.org/)。这个类用来操作本地文件的打开与保存。在不同的平台上,wxFileDialog封装平台原生的API来实现,譬如win32平台,封装了GetOpenFileName和GetSaveFileName这2个API函数。我们只讨论win32平台。既然只是简单的封装这2

zeroom的技术专栏 2900

独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)

内容概要:本文介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,聚焦于全桥LLC谐振变换器在电力电子系统中的建模与仿真研究。该资源提供了基于Plecs平台的高精度仿真模型,完整呈现了变换器的主电路拓扑、谐振参数设计、软开关实现机制及变频控制策略,能够有效支持对系统效率、动态响应与稳态性能的深入分析。模型充分体现了LLC谐振变换器在实现零电压开关(ZVS)、降低开关损耗和提升能量转换效率方面的优势,适用于新能源发电、储能系统及高效率电源设计等应用场景。; 适合人群:具备电力电子、自动控制及电路理论基础知识,从事电力电子变换器设计、新能源系统开发或相关领域研究的研究生、高校教师及工程技术人员。; 使用场景及目标:①用于全桥LLC谐振变换器的工作原理教学与参数设计实践;②支撑软开关特性、变频控制策略、效率优化等关键技术的仿真验证与性能评估;③作为科研项目、课程设计或毕业设计中电力电子系统仿真的核心参考模型,促进理论与工程实践的结合。; 阅读建议:建议使用者在掌握LLC谐振变换器基本工作原理的基础上,结合相关电力电子教材与Plecs软件操作指南,通过调整谐振元件参数、负载条件及控制策略进行多工况仿真,深入理解其工作机理与优化方法,并结合实验数据对比验证仿真结果的准确性。

[Happy Coding] fprintf 不正确调用惹的祸

我们都知道C语言标准库操作文件写有一个函数叫做fprintf,用来写出字符串到文件里。这个函数如果不特别注意,会给我们带来很大的麻烦。 比如下面的代码段: const char* outstring = "xxxxx"; FILE* outfileH = fopen("test.txt", "w"); if (!outfileH) { return false; } fprint

zeroom的技术专栏 2011

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3047

Qt Location实战:5分钟搞定地图插件切换与卫星图源加载(附完整代码)

本文是Qt Location开发系列教程的实战指南,详细讲解如何在Qt应用中快速实现地图插件(如Esri、OSM、MapboxGL)的动态切换与卫星图源的加载。通过清晰的代码示例,帮助开发者理解插件机制,解决常见配置问题,并在5分钟内构建出具备交互式地图切换功能的应用程序。

kafka6courier的博客 526

[Happy Coding] luabind 0.9.1版本尝试

luabind 0.9.1版本尝试 1. 编译luabind 0.9.1 linux版本需要bjam binary 直接copy boost/1.37.0目录中编译好的bjam binary到~/bin目录,然后在luabin根目录中运行bjam 编译之前需要设置环境变量BOOST_ROOT=~/mylibs/boost/1.37.0/ 和LUA_PATH=~/mylibs/lua/

zeroom的技术专栏 1857

倾斜摄影与激光点云融合建模:Photoscan+ContextCapture避坑指南

本文详细解析了倾斜摄影与激光点云融合建模的技术流程,重点介绍了使用Agisoft Metashape(原Photoscan)与ContextCapture进行数据融合的实战指南。文章深入探讨了数据预处理、坐标系统一、空三计算策略及在ContextCapture中进行点云配准等关键步骤,旨在帮助从业者规避常见陷阱,高效构建兼具高精度几何与真实纹理的三维实景模型。

weixin_29062613的博客 250

[Happy Coding] 只能new不能delete的基类实现方法

1. 问题提出 定义一个类,客户端只能new不能delete,但是要求这个类能够被继承。 2. 问题分析 客户端代码能够new一个类实例,说明这个类提供了对应的public访问域的构造函数,不能delete它,说明这个类没有提供public访问域的析构函数。也就是说,析构函数要么是在protected访问域中,要么是在private访问域中。但是要求这个类能够被继承,至少说明析构函数

zeroom的技术专栏 1772

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

内存对齐是指在内存中为数据对象分配存储空间时,按照一定的规则将数据存储在特定的地址上,以提高内存访问效率。不同的数据类型在内存中都有其特定的对齐要求,例如,int类型通常要求 4 字节对齐,double类型通常要求 8 字节对齐。这意味着数据的存储地址必须是其对齐字节数的整数倍。如果不进行内存对齐,处理器在访问数据时可能需要进行多次内存访问,从而降低了访问效率。指令可以用于控制结构体内存布局,它允许程序员指定结构体成员的对齐方式。其基本用法是在结构体定义之前使用来指定对齐字节数n,其中n。

大模型大数据攻城狮的专栏 3226

科研绘图系列:R语言circos图(circos plot)

科研绘图系列:R语言circos图(circos plot)

专注生信领域 3434

[Happy Coding] 加速Windows GUI debug版本的编译

1. 问题描述 我们重构我们的GUI程序时,增加了很多小的工程库,VC++编译GUI最顶层DLL库libpkgA的速度让人几乎无法忍受。 以下是从我们的buildbot系统里截取出来的LOG: 28>... 28>Embedding manifest... 28>Build Time 188:17 编译时间**188分钟**。 GUI app依赖于这个DLL库,同时也依赖

zeroom的技术专栏 1396

ResNet改进(7):添加 SK注意力机制

实现 SK 注意力机制。

2401_82355416的博客 732

[Effective WX] wxPropertyGrid遇上wxWS_EX_VALIDATE_RECURSIVELY产生的BUG

对于wxWidget的第三方库wxPropertyGrid,客户端代码实例化一个wxPropertyGrid时有时会发生CRASH。 简单的说,就是下面的代码行在某种情况下会CRASH: wxPropertyGrid* pPG = new wxPropertyGrid(pParentWin, wxID_ANY); 那么到底是在哪种情况下呢? 编写了一个简单的测试代码,跟踪调试发现,C

zeroom的技术专栏 1312

Android Audio基础——系统服务(二)

AudioService 继承自 IAudioService.Stub。IAudioService.Stub 类很明显是通过 IAudioService.aidl 自动生成的。AudioService 位于 Binder Native 端。AudioManager 拥有 AudioService 的 Binder Proxy 端,是 AudioService 在客户端的一个代理。几乎所有客户端对 AudioManager 进行的请求,最终都会交由 AudioService 实现。

小旭的专栏 2074

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

[Happy DSA] 删除单链表中任意一个节点的方法

在阅读c-algorithms代码时,又看到如下的代码(删除单链表中任意一个节点) /* A singly-linked list */ struct _SListEntry { SListValue data; SListEntry *next; }; int slist_remove_data(SListEntry **list, SListEqual

zeroom的技术专栏 1282

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

glibc中几个数值处理函数

ceil/floor/rint/round,这几个C的数值处理函数,我们通常用它们来取整某个特定的浮点数。 — Function: double ceil (double x) These functions round x upwards to the nearest integer, returning that value as a double. Thus, ceil (1

zeroom的技术专栏 1022

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

关于<C专家编程>的笔记

重新阅读, 以下是关于的笔记,觉得要重点掌握的。 1. 关于const的变量的赋值 foo(const char** p) { } main(int argc, char** argv) {     foo(argv);  // *** } 上面代码段中//***会产生编译错误。原因在于 const char** p = argv; 赋值是不被允许的。

zeroom的技术专栏 989

[Happy DSA] 程序实现绘制箭头的原理

下图演示了如何给一条线段画上箭头的实现原理,主要也就是如何旋转一个向量。 其中rotation angle和scale都可以在程序代码中自定义。

zeroom的技术专栏 755
上一篇: 启动我自己的<Effective Python>系列文章
下一篇: [Effective WX] wx的UI UnitTest explained
zero_lee
博客等级 码龄21年 94粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值