<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[annjeff的博客]]></title><description><![CDATA[want it ,do it ,got it.]]></description><link>https://blog.youkuaiyun.com/annjeff</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; annjeff]]></copyright><item><title><![CDATA[子进程回收函数 wait 与 waitpid 用法详解]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/117290836</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/117290836</guid><author>annjeff</author><pubDate>Wed, 26 May 2021 14:24:21 +0800</pubDate><description><![CDATA[子进程回收
文章目录子进程回收0. 背景1. wait 函数1.1 函数原型1.2 函数功能1.3 函数参数1.4 函数返回值1.5 使用宏获取传出参数所携带的状态信息1.6 代码示例2. waitpid 函数2.1 函数原型2.2 函数功能2.3 函数参数2.4 函数返回值2.5 使用宏获取传出参数所携带的状态信息2.6 代码示例
0. 背景
进程在终止时会关闭所有文件描述符、释放在用户区分配的内存，但是在内核区该进程的进程控制块(PCB)仍被保留用于保存一些信息。


如果程序正常退出，PCB中保存的则]]></description><category></category></item><item><title><![CDATA[基于模板实现 MyArray 数组]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/108953571</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/108953571</guid><author>annjeff</author><pubDate>Wed, 07 Oct 2020 20:16:34 +0800</pubDate><description><![CDATA[基于模板实现 MyArray 数组

文章目录基于模板实现 MyArray 数组1. 基本要求2. 代码实现3. 遇到问题4. 代码测试

1. 基本要求

MyArray 数组需要支持内置数据类型与自定义数据类型
MyArray 数据部分存储在堆区
MyArray 提供构造函数的函数需要指定数组容量
MyArray 需要提供析构函数，释放堆区内存
MyArray 需要提供拷贝构造函数
MyArray 需要提供 operator=，operator[] 重载操作符
MyArray 需要提供 push_bac]]></description><category></category></item><item><title><![CDATA[C++ operator= 操作符重载返回值为什么是自身的引用？]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/108952294</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/108952294</guid><author>annjeff</author><pubDate>Wed, 07 Oct 2020 17:18:02 +0800</pubDate><description><![CDATA[C++ operator= 操作符重载返回值为什么是自身的引用？

文章目录C++ operator= 操作符重载返回值为什么是自身的引用？1. 内置数据类型连续赋值2. 如果 operator= 返回非自身引用3. operator= 返回自身引用

1. 内置数据类型连续赋值
int a, b, c = 9;
a = b = c;	// A
(a = (b = c))	// B

(a = b) = c; // C


A 处基本类型连续赋值，其效果相当于 B 处，赋值顺序为 [c–&gt;b --&g]]></description><category></category></item><item><title><![CDATA[C语言字符串与字符数组]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/107727886</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/107727886</guid><author>annjeff</author><pubDate>Sat, 01 Aug 2020 13:33:46 +0800</pubDate><description><![CDATA[C语言字符串与字符数组

1. 字符串与字符数组
1.1 C 语言字符串

什么是字符串？


通俗的讲字符串是由一串字符组成,例如 “Hello World\n”，即是一个字符串。
C 语言中没有真正意义上的字符串类型，字符串由字符数组或者字符串常量来表示。


什么是字符串常量？

const char *p = "Hello World\n";


上述示例中 "Hello World\n"即是一个字符串常量，该常量由一个字符类型指针保存其实际地址。该字符串常量一般存储于 静态存储区。C 语言字符串常]]></description><category></category></item><item><title><![CDATA[Linux进程间通信之命名管道]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/107279530</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/107279530</guid><author>annjeff</author><pubDate>Sat, 11 Jul 2020 10:29:36 +0800</pubDate><description><![CDATA[Linux进程间通信之命名管道

文章目录Linux进程间通信之命名管道0.背景知识1.命名管道 fifo2.mkfifo 函数介绍2.1 函数原型2.2 函数功能2.3 形参解释2.4 返回值解释3.案例程序之两个无血缘关系进程数据传递

0.背景知识
学习命名管道需要了解管道的基本原理，这部分内容在上一篇文章 Linux进程间通信之匿名管道（点击直达） 有所提及，建议先学习命名管道。

1.命名管道 fifo
有血缘关系的进程之间通信可以使用匿名管道 pipe，无血缘关系的两个进程如何进行数据传递呢？
]]></description><category></category></item><item><title><![CDATA[Linux进程间通信之匿名管道]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/107251682</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/107251682</guid><author>annjeff</author><pubDate>Fri, 10 Jul 2020 16:26:56 +0800</pubDate><description><![CDATA[Linux进程间通信之管道

文章目录Linux进程间通信之管道0.思考题1.基本概念2.管道函数 pipe 介绍2.1 函数原型2.2 函数功能2.3 形参解释2.4 返回值解释3.案例程序之父子进程通信

0.思考题

全局变量，父子进程之间是否可以相互访问？
父子进程在内存占用的是否为同一块内存空间？


一般而言，我们可以认为每个进程享有独立的内存空间（如果子进程只读数据Linux 系统会优化使得父子进程占据同一块区域，这一情况不在我们考虑范围之内）。
因为，各自占据一块内存，因此每个进程都有一个 ]]></description><category></category></item><item><title><![CDATA[Linux 系统 IO之 lseek 函数]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/107100280</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/107100280</guid><author>annjeff</author><pubDate>Fri, 03 Jul 2020 11:00:11 +0800</pubDate><description><![CDATA[Linux 系统 IO之 lseek 函数

文章目录Linux 系统 IO之 lseek 函数1. lseek 函数1.1 头文件包含1.2 函数原型1.3 函数功能1.4 函数返回值1.5 形参解释2. 案例程序

1. lseek 函数
1.1 头文件包含
// 因为形参包含 off_t 类型，所以要包含 types.h
#include &lt;sys/types.h&gt;
#include &lt;unistd.h&gt;

1.2 函数原型
// off_t 用于文件大小和偏移量
// 在我的]]></description><category></category></item><item><title><![CDATA[Linux 系统 IO之 read write 函数]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/107098440</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/107098440</guid><author>annjeff</author><pubDate>Fri, 03 Jul 2020 09:40:33 +0800</pubDate><description><![CDATA[Linux 系统 IO之 read write 函数

文章目录Linux 系统 IO之 read write 函数1. read 函数1.1 头文件包含1.2 函数原型1.3 函数功能1.4 函数返回值1.5 形参解释2. write 函数2.1 头文件包含2.2 函数原型2.3 函数功能2.4 函数返回值2.5 形参解释3. 案例程序:读写一个已存在文件内容至新建文件中

1. read 函数
1.1 头文件包含
// 记忆方法:unistd &lt;--&gt; uinx std
#include &]]></description><category></category></item><item><title><![CDATA[Linux 系统 IO之 open close 函数]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/107086983</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/107086983</guid><author>annjeff</author><pubDate>Thu, 02 Jul 2020 22:08:01 +0800</pubDate><description><![CDATA[Linux 系统 IO之 open close 函数

文章目录Linux 系统 IO之 open close 函数1. open 函数族1.1 头文件包含1.2 函数原型1.3 函数功能1.4 函数返回值1.5 形参解释1.6 案例程序1.6.1 open 函数打开一个文件，若该文件不存在则新建1.6.2 openat 函数根据相对路径打开一个文件，若不存在则新建2. close 函数2.1 头文件包含2.2 函数原型2.3 函数功能2.4 函数返回值2.4 形参解释

1. open 函数族
1.1 头]]></description><category></category></item><item><title><![CDATA[C++ 迭代与递归方式分别实现二分查找]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/107072746</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/107072746</guid><author>annjeff</author><pubDate>Wed, 01 Jul 2020 21:50:49 +0800</pubDate><description><![CDATA[C++ 迭代与递归方式分别实现二分查找
文章目录C++ 迭代与递归方式分别实现二分查找0.前言1.迭代方式二分查找2.递归方式二分查找
0.前言
查找算法是一种常用算法，查找算法即从给定的数组中，找出要查找的元素第一次出现的位置，如果数组中该元素不存在，返回 -1。
使用二分查找的注意事项：
必须是有序序列才可以使用二分查找。
1.迭代方式二分查找
int binarySearch(std::vector&lt;int&gt;&amp; arr, const int value){
    int head]]></description><category></category></item><item><title><![CDATA[【004】 ITK 读取 CT Dicom 数据并使用 VTK 显示]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/106833805</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/106833805</guid><author>annjeff</author><pubDate>Thu, 18 Jun 2020 14:18:47 +0800</pubDate><description><![CDATA[【004】 ITK 读取 CTdicom 数据并使用 VTK 显示

文章目录1.CMakeList.txt2.ITK 读取 CT dicom 文件并使用 VTK 显示代码实现

1.CMakeList.txt
cmake_minimum_required(VERSION 3.5)
project(Image2ReadImage LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_packag]]></description><category></category></item><item><title><![CDATA[【003】ITK 之 HelloWorld]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/106818561</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/106818561</guid><author>annjeff</author><pubDate>Wed, 17 Jun 2020 21:46:36 +0800</pubDate><description><![CDATA[ITK 之 HelloWorld

文章目录ITK 之 HelloWorld0.前言1.新建 HelloWorld 项目2.实现 HelloWorld 代码2.1 CMakeLists.txt2.2 main.cpp3.编译运行4.运行结果
——————
0.前言
前面一篇文章已经编译并配置好了ITK ，我们如何使用 ITK 库 呢？
这里，我选择了 Qt Creator 作为 IDE ，使用 CMake 管理项目的方式使用 ITK 库。
1.新建 HelloWorld 项目

打开Qt Creator 选]]></description><category></category></item><item><title><![CDATA[【002】ITK 5.0.1 在Windows10+VS2017+CMake 环境下编译安装]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/106812452</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/106812452</guid><author>annjeff</author><pubDate>Wed, 17 Jun 2020 20:25:28 +0800</pubDate><description><![CDATA[ITK 5.0.1 在Win10+VS2017+CMake 环境下编译安装
0.前期准备




软件
网址




ITK源码网站地址：
https://itk.org/download//


Cmake	网站地址：
https://cmake.org/download/


VisualStudio	网站地址：
https://visualstudio.microsoft.com/zh-hans/downloads/



此处所有的软件我的环境均安装的64位版本，同时也建议你安装64位版本 。


]]></description><category></category></item><item><title><![CDATA[【001】Insight Toolkit 模块组织方式]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/106803984</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/106803984</guid><author>annjeff</author><pubDate>Wed, 17 Jun 2020 11:40:00 +0800</pubDate><description><![CDATA[Insight Toolkit 模块组织方式
1.Insight Toolkit 整体组织方式

2.Insight Toolkit Modules 模块的具体组织架构


]]></description><category></category></item><item><title><![CDATA[C++ 之继承]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/106772615</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/106772615</guid><author>annjeff</author><pubDate>Tue, 16 Jun 2020 21:33:54 +0800</pubDate><description><![CDATA[C++ 继承
0.利用 cl.exe 工具查看某个类的对象内存模型
Visual Studio 自带了一个很有用的工具cl.exe。使用该工具可以查看 【该类对象的内存模型】 。
该工具的使用方法：

找到 VS 20XX的开发人员命令提示符，单击打开
使用 cd 命令，跳转至我们要查看的类所在目录
使用命令：**cl /d1 reportSingleClassLayout类名 "文件名"**即可查看【指定类对象的内存模型】
例如：cl /d1 reportSingleClassLayoutDerive "]]></description><category></category></item><item><title><![CDATA[C++ 虚函数与动态绑定原理剖析]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/106734773</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/106734773</guid><author>annjeff</author><pubDate>Sun, 14 Jun 2020 22:36:36 +0800</pubDate><description><![CDATA[C++ 虚函数与动态绑定
1. 虚函数基本概念
&nbsp;&nbsp;&nbsp;&nbsp;基类（Base）我们记作 B ，派生类类（Derive）我们记作 D 。有时候会出现这么一种状况：对于某些函数，基类 B 希望它的派生类 D 各自定义适合自身的版本,此时基类 B 就将这些函数声明成虚函数（virtual function）。

将一个成员函数声明成虚函数，只需要在函数前添加 virtual 关键字。
Tips:
派生类必须在其内部对所有重新定义的虚函数进行声明。

2. 虚函数的几点说明

所有]]></description><category></category></item><item><title><![CDATA[Win10  Navicat 连接 Ubuntu MySQL8.0 2003 -Can't connected to MySQL server on 'x.x.x.x'(10061 "Unknown)]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/105857016</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/105857016</guid><author>annjeff</author><pubDate>Thu, 30 Apr 2020 11:45:14 +0800</pubDate><description><![CDATA[Win10  Navicat 连接 Ubuntu MySQL8.0 2003 -Can’t connected to MySQL server on ‘x.x.x.x’(10061 "Unknown error)

0. 遇到问题描述
不废话直接贴图，下图是我在 Windows 10 下使用Navicat连接Ubuntu 20.04下MySQL` 服务器报的错。如果和我的错误一样，本文对您有参考价...]]></description><category></category></item><item><title><![CDATA[Ubuntu20.04平台Qt5.14.2 编译MySQL 8.0驱动程序]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/105798351</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/105798351</guid><author>annjeff</author><pubDate>Mon, 27 Apr 2020 21:48:29 +0800</pubDate><description><![CDATA[本文导航0.前言1.准备工作1.1 Qt 自带 mysql 库文件源代码路径1.2 修改 `mysql.pro`文件1.3 修改 `qsqldriverbase.pri`文件2.编译

0.前言
在 Qt 中连接数据库需要提供对应数据库的库文件支持，Qt自带部分数据库的库文件,在安装路径下Qt/5.14.2/gcc_64/plugins/sqldrivers文件夹下可以找到。通常，该文件夹下没有M...]]></description><category></category></item><item><title><![CDATA[Ubuntu20.04 编译安装 FFmpeg 详细教程]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/105748428</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/105748428</guid><author>annjeff</author><pubDate>Sat, 25 Apr 2020 20:19:53 +0800</pubDate><description><![CDATA[本文目录导航0.预备软件包0.1 FFmpeg0.2 SDL21.安装编译所需工具1.1 安装 aptitude1.2 安装 gcc、g++1.3 安装 yasm、nasm2.安装依赖库3.编译 FFmpeg4.配置 FFmpeg4.1 配置环境变量4.2 配置动态链接库

0.预备软件包
0.1 FFmpeg

FFmpeg 源码下载地址：http://ffmpeg.org/download.h...]]></description><category></category></item><item><title><![CDATA[QtCreator pthread 错误问题解决办法：error: undefined reference to `pthread_create`]]></title><link>https://blog.youkuaiyun.com/annjeff/article/details/105746290</link><guid>https://blog.youkuaiyun.com/annjeff/article/details/105746290</guid><author>annjeff</author><pubDate>Sat, 25 Apr 2020 11:01:12 +0800</pubDate><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;在 QtCreator 中写 C++ 多线程程序，编译报 error: undefined reference to pthread_create 错误，产生问题的原因很简单，没有链接 pthread 库。


解决方案：
在 *.pro 中添加 LIBS += -lpthread


多线程 Demo


#include &lt;iostream...]]></description><category></category></item></channel></rss>