• 与 C 语言长别离

    Posted by : lon.y@qq.com on 2018年1月30日

     这几天来,我在思考那些正在挑战 C 语言的系统编程语言领袖地位的新潮语言,尤其是 Go 和 Rust。思考的过程中,我意识到了一个让我震惊的事实 —— 我有着 35 年的 C 语言经验。每周我都要写很多 C 代码,但是我已经记不清楚上一次我 创建一个新的 C 语言项目 是在什么时候了。 如果你完全不认为这种情况令人震惊,那你很可能不是一个系统程序员。我知道有很多程序员使用更高级的语言工作。但是我把大部分时间都花在了深入打磨像 NTPsec、 GPSD 以

    阅读全文...

  • 多线程编程基础知识

    Posted by : lon.y@qq.com on 2017年12月6日

    当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的。本实例针对多线程技术在应用中经常遇到的问题,如线程

    阅读全文...

  • 提升 C++ 技能的 7 种方法

    Posted by : lon.y@qq.com on 2017年8月25日

    夏天时常会谈到大海、太阳、沙滩、大山或者你的家庭住宅。更充裕的时间也是夏天带来的好处之一。可能是因为你在休假,也可能是因为这段时间工作没有那么忙。无论是哪种情况,与一年中的其他季节相比,夏天的时间似乎更加宽裕。 你有两个选择:1)把所有夏季空闲时间都用来休整,适当放松一下没什么不可以。2)或者你可以投入一部分空闲时间来提升你的技能,尤其是 C++,用 C++ 水平的提高(boost C++)来开始新的一年。 如果你觉得选择1)更适合你,那么关掉手机和笔记本

    阅读全文...

  • 用 C 语言写一个简单的 Unix Shell(2)

    Posted by : lon.y@qq.com on 2017年8月9日

    在第一部分中我们讨论了 fork 系统调用以及它的注意事项。在本文中,我们将研究怎样执行命令。 这里将介绍 exec 函数家族。即以下函数: execl execv execle execve execlp execvp 为了满足需要,我们将使用 execvp,它的签名看起来像这样: int execvp(const char *file, char *const argv[]); 函数名中的 vp 表明:它接受一个文件名,将在系统 $PATH 变量中搜索

    阅读全文...

  • C++17 中那些值得关注的特性

    Posted by : lon.y@qq.com on 2017年8月4日

    引用 C++17标准在2017上半年已经讨论确定,正在形成ISO标准文档,今年晚些时候会正式发布。本文将介绍最新标准中值得开发者关注的新特新和基本用法。 总的来说C++17相比C++11的新特性来说新特性不算多,做了一些小幅改进。C++17增加了数十项新特性,值得关注的特性大概有下面这些: constexpr if constexpr lambda fold expression void_t structured binding std::apply,

    阅读全文...

  • 用 C 语言写一个简单的 Unix Shell(1)

    Posted by : lon.y@qq.com on 2017年7月7日

    【导读】:作者用 C 语言实现了一个简易的unix shell,通过本文可加深对 shell 和 Unix 系统原理的理解。 写 Unix shell 是我正在 RC 研究的一个项目。这是第一部分,后续会有一系列的文章。 免责声明:我不是编写 shell 这个课题的专家,我是一边自学一边分享我的发现。 shell 是什么? 关于这一点已经有很多书面资料,所以对于它的定义我不会探讨太多细节。只用一句话说明: shell 是允许你与操作系统的核心作交互的一个界

    阅读全文...

  • 一个简单粗暴的人脸认证标注工具的实现

    Posted by : lon.y@qq.com on 2017年7月6日

    小喵的唠叨话:话说最近小喵也要开始写论文了,想了两周还是没有头绪,不知道该写些什么。恰好又被分配了一点标注数据的工作,于是乎想写点代码,休闲一下。结果也就是这篇博客。对了,小喵对GUI编程一窍不通,只知道Windows有MFC,Mac上的不知道。。。恰好听说过QT,而且知道这个界面库是跨平台的,也就选用了这个工具了。 那么现在开始和小喵一起瞎猫似的捯饬QT吧~ 先看一眼效果图: 是不是乍一看还挺炫酷。功能上也还好,至少简单的标注工作都能完成了。那么让我们来

    阅读全文...

  • C++ 程序内存泄漏检测方法

    Posted by : lon.y@qq.com on 2017年7月4日

    一、前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成“统一”的标准。而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同。下面结合我的实际经验,整理下常见定位内存泄漏的方法。 注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这个库或者CRT库本身的内存泄漏检测函数能够分析出内存泄漏,相对

    阅读全文...

  • C++ STL 内存配置的设计思想与关键源码分析

    Posted by : lon.y@qq.com on 2017年7月4日

    说明:我认为要读懂STL中allocator部分的源码,并汲取它的思想,至少以下几点知识你要了解:operator new和operator delete、handler函数以及一点模板知识。否则,下面你很可能看不大明白,补充点知识再学习STL源码比较好。 下面会结合关键源码分析C++STL(SGI版本)的内存配置器设计思想。关键词既然是“思想”,所以重点也就呼之欲出了。 1、allocator的简短介绍 我阅读的源码是SGI公司的版本,也是看起来最清楚的

    阅读全文...

  • C++ 中命名空间的 5 个常见用法

    Posted by : lon.y@qq.com on 2017年7月4日

    译者注:可能很多程序员对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。 命名空间在1995年被引入到 c++ 标准中,通常是这样定义的: 命名空间定义了新的作用域。它们提供了一种避免名称冲突的方法。 c++ 中的命名空间通常用于避免命名冲突。尽管命名空间在最近的 c++ 代码中广泛使用,但大多数较旧代码都不使用此工具。 基于对众多C++项目源码的探索与研究,总结出了在这些项目中使用命名空间的一些常

    阅读全文...