<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ce123的技术博客]]></title><description><![CDATA[专注于嵌入式软件开发]]></description><link>https://blog.csdn.net/ce123</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ce123]]></copyright><item><title><![CDATA[理解Linux进程/线程的各种ID]]></title><link>https://blog.csdn.net/ce123/article/details/118633387</link><guid>https://blog.csdn.net/ce123/article/details/118633387</guid><author>ce123</author><pubDate>Sun, 25 Jul 2021 22:44:06 +0800</pubDate><description><![CDATA[通过Linux的top和ps命令中，默认看到最多的是pid (process ID)，也许你也能看到lwp (thread ID)和tgid (thread group ID for the thread group leader)等等，而在Linux库函数和系统调用里也许你注意到了pthread id和tid等等。还有更多的ID，比如pgrp (process group ID), sid (session ID for the session leader)和 tpgid (tty process gr]]></description><category></category></item><item><title><![CDATA[C语言之fileno函数]]></title><link>https://blog.csdn.net/ce123/article/details/118476963</link><guid>https://blog.csdn.net/ce123/article/details/118476963</guid><author>ce123</author><pubDate>Mon, 05 Jul 2021 06:11:12 +0800</pubDate><description><![CDATA[open函数相关接口(open 是系统调用 返回的是文件句柄):
#include &lt;sys/stat.h&gt; 
#include &lt;fcntl.h&gt; 
   
int open(const char *pathname, int flags); 
int open(const char *pathname, int flags, mode_t mode);

fopen函数相关接口(open是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api):
FILE *fo]]></description><category></category></item><item><title><![CDATA[Linux下文件的时间属性]]></title><link>https://blog.csdn.net/ce123/article/details/117483929</link><guid>https://blog.csdn.net/ce123/article/details/117483929</guid><author>ce123</author><pubDate>Wed, 02 Jun 2021 21:20:09 +0800</pubDate><description><![CDATA[文件主要有三个时间属性:
● modification time (mtime,修改时间):这个时间指的是文件内容修改的时间,而不是文件属性的修改,当数据内容修改时,这个时间就会改变,用命令ls -l默认显示的就是这个时间;
● status time (ctime,状态时间):当一个文件的状态改变时,这个时间就会改变,例如更改了文件的权限与属性等,它就会改变;
● access time(atime,访问时间):当读取文件内容时,就会更改这个时间,例如使用cat 去读取/etc/man.config,那么]]></description><category></category></item><item><title><![CDATA[嵌入式linux开发中gcc的一些优化编译选项]]></title><link>https://blog.csdn.net/ce123/article/details/116690119</link><guid>https://blog.csdn.net/ce123/article/details/116690119</guid><author>ce123</author><pubDate>Wed, 12 May 2021 06:20:51 +0800</pubDate><description><![CDATA[-Werror

编译选项加上-Werror 遇到任何的警告工程将停止编译。

-fno-exceptions

禁用运行时类型信息。

-fno-rtti

禁用异常机制，一般只有对程序运行效率及资源占用比较看重的场合才会使用，如果要做这两个的话最好连libstdc++和其他所有的的c++库都用这两个参数重新编译一遍，否则光是你自己的程序禁用了这两个特性，而别的库依然开着，效果就大打折扣了。

-fno-threadsafe-statics

对于在函数内部声明的static变量，编译器默认是会使得这样.]]></description><category></category></item><item><title><![CDATA[BUILD_BUG_ON]]></title><link>https://blog.csdn.net/ce123/article/details/116585917</link><guid>https://blog.csdn.net/ce123/article/details/116585917</guid><author>ce123</author><pubDate>Mon, 10 May 2021 09:26:22 +0800</pubDate><description><![CDATA[在分析io_uring源码的时候发现了这个宏,稍微了解了一下


static int __init io_uring_init(void)
{
#define __BUILD_BUG_VERIFY_ELEMENT(stype, eoffset, etype, ename) do { \
	BUILD_BUG_ON(offsetof(stype, ename) != eoffset); \
	BUILD_BUG_ON(sizeof(etype) != sizeof_field(stype, ename));]]></description><category></category></item><item><title><![CDATA[gcc的fmessage-length参数]]></title><link>https://blog.csdn.net/ce123/article/details/115737325</link><guid>https://blog.csdn.net/ce123/article/details/115737325</guid><author>ce123</author><pubDate>Thu, 15 Apr 2021 20:02:03 +0800</pubDate><description><![CDATA[gnu工具链编译过程中，控制台输出的一行信息是不换行的。当输出信息过长时（如编译错误时的信息），会导致你无法看到完整的输出信息。

加入-fmessage-length=0后，输出信息会根据控制台的宽度自动换行，这样就能看全输出信息了。
...]]></description><category></category></item><item><title><![CDATA[如何当好一个师长之软件开发篇]]></title><link>https://blog.csdn.net/ce123/article/details/115291832</link><guid>https://blog.csdn.net/ce123/article/details/115291832</guid><author>ce123</author><pubDate>Mon, 29 Mar 2021 07:04:47 +0800</pubDate><description><![CDATA[目录

一、要勤快。

二、要摸清上级的意图。

三、要调查研究。

四、要有个活地图。

五、要把各方面的问题想够想透。

六、要及时下达决心。

七、要有一个很好的很团结的班子。

八、要有一个很好的战斗作风。

九、要重视政治，亲自做政治工作。

刷知乎的时候，看到了《如何当好一个师长》这篇文章，感触很深。做任何事情能做到这个程序，就没有做不成。

一、要勤快。

不勤快的人办不好事情，不能当好军事指挥员。应该自己干的事情一定要亲自过目，亲自动手。比如，应该上去看的山头就要爬上去，应该了解的情况就要及]]></description><category></category></item><item><title><![CDATA[mount --bind妙用]]></title><link>https://blog.csdn.net/ce123/article/details/114729347</link><guid>https://blog.csdn.net/ce123/article/details/114729347</guid><author>ce123</author><pubDate>Sat, 13 Mar 2021 09:31:12 +0800</pubDate><description><![CDATA[在嵌入式系统中,为了系统的稳定性,常将文件系统只读挂载,避免在写文件系统的情况出现异常,导致文件系统破坏.但不少程序默认会往/etc目录写入数据,可以采用mount --bing将一个可读写的目录映射到/etc目录下面,这样既保证了rootfs的稳定性,又不用修改程序的默认行为.


#move etc to usrdata
MoveEtcToUsrdata() {
    mkdir -p /usrdata/etc
    if [ ! -f /usrdata/bind_etc_flag ];then..]]></description><category></category></item><item><title><![CDATA[系统架构设计师-软件开发模型（构件组装模型）]]></title><link>https://blog.csdn.net/ce123/article/details/113099618</link><guid>https://blog.csdn.net/ce123/article/details/113099618</guid><author>ce123</author><pubDate>Fri, 19 Feb 2021 18:47:19 +0800</pubDate><description><![CDATA[随着软构件技术的发展，人们开始尝试利用软构件进行搭积木式的开发，即构件组装模型。在构建组装模型中，当经过需求分析定义出软件功能后，将对构件的组装结构进行设计，将系统划分成一组构件的集合，明确构件之间的关系。在确定了系统构件后，则将独立完成每一个构件，这时既可以开发软件构件，也可以重用已有的构件，当然也可以购买或选用第三方的构件。构件是独立的、自包容的，因此架构的开发也是独立的，构件之间通过接口相互协作。构件组装模型的一般开发过程如下图所示。



构件组装模型的优点如下：

（1）构件的自包容...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-软件开发模型（增量模型）]]></title><link>https://blog.csdn.net/ce123/article/details/113099588</link><guid>https://blog.csdn.net/ce123/article/details/113099588</guid><author>ce123</author><pubDate>Mon, 08 Feb 2021 10:04:55 +0800</pubDate><description><![CDATA[演化模型的另一种形式是增量模型。在系统的技术架构成熟、风险较低的时候，可以采用增量的方式进行系统开发，这样可以提前进行集成测试和系统测试，缩短初始版本的发布周期，提高用户对系统的可见度。

对于增量模型，通常有两种策略。一是增量发布的办法。即首先做好系统的分析和设计工作，然后将系统划分为若干不同的版本，每一个版本都是一个完整的系统，后一版本以前一版本为基础进行开发，扩充前一版本的功能。在这种策略中，第一版本往往是系统的核心功能，可以满足用户最基本的需求，随着增量的发布，系统的功能逐步地丰富、完善...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-软件开发模型（螺旋模型）]]></title><link>https://blog.csdn.net/ce123/article/details/113099444</link><guid>https://blog.csdn.net/ce123/article/details/113099444</guid><author>ce123</author><pubDate>Sun, 24 Jan 2021 22:50:06 +0800</pubDate><description><![CDATA[瀑布模型看起来很好，随着一个又一个阶段的流过，软件系统就被建立起来了。可是在应用软件开发的过程中，人们发现很难一次性完全理解用户的需求、设计出完美的架构，开发出可用的系统，这是由于人的认知本身就是一个过程，这个过程是渐进的、不断深化的。对于复杂问题，“做两次”肯定能够做得更好。那么，对于软件开发这个复杂而且与人的认知过程紧密相关的事也应该是一个渐进的过程。演化模型正是基于这个观点提出的。一般情况下，一个演化模型可以看做若干次瀑布模型的迭代，当完成一个瀑布模型后，重新进入下一个迭代周期，软件在这样的迭代...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-软件开发模型（瀑布模型）]]></title><link>https://blog.csdn.net/ce123/article/details/112442806</link><guid>https://blog.csdn.net/ce123/article/details/112442806</guid><author>ce123</author><pubDate>Sun, 10 Jan 2021 21:03:39 +0800</pubDate><description><![CDATA[在计算机刚刚诞生的年代，计算机是一种只有天才才能掌握的工具。人们对软件的认知仅仅停留在程序的层面上，所谓的软件开发就是那些能够掌握计算机的天才们写的一些只有计算机才能理解的二进制序列。但随着技术的发展，软件的复杂度不断提高，人们进入了大规模软件开发的时代。这时，人们发现，软件系统已经变得非常复杂，需要遵循一定的开发方法才能取得成功，于是称这些模式化的开发方法为开发模型。

顾名思义，瀑布模型就如同瀑布一样，从一个特定的阶段流向下一个阶段，如下图所示。

瀑布模型的核心思想

瀑布模型认为，软件开...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-嵌入式系统设计]]></title><link>https://blog.csdn.net/ce123/article/details/109698443</link><guid>https://blog.csdn.net/ce123/article/details/109698443</guid><author>ce123</author><pubDate>Sun, 03 Jan 2021 22:30:41 +0800</pubDate><description><![CDATA[简介

嵌入式系统是一种以应用为中心，以计算机技术为基础，可以适应不同应用对功能、可靠性、成本、体积、功耗等方面的要求，集可配置，可裁减的软、硬件于一体的专用计算机系统。它具有很强的灵活性，主要由嵌入式硬件平台、相关支撑硬件、嵌入式操作系统、支撑软件以及应用软件组成。其中，“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本的核心要素，具体来讲：

嵌入性：指计算机计算机嵌入到对象系统中，且满足对象系统的环境要求，如物理环境（小型）、电气/气氛环境（可靠）、成本（价廉）等要求。

专用性：...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-遗留系统]]></title><link>https://blog.csdn.net/ce123/article/details/109611108</link><guid>https://blog.csdn.net/ce123/article/details/109611108</guid><author>ce123</author><pubDate>Sun, 27 Dec 2020 17:13:47 +0800</pubDate><description><![CDATA[计算机技术飞速发展，日新月异，许多企业因为业务发展的需要和市场竞争的压力，需要建设新的企业信息系统。在这种升级改造的过程中，怎么处理和利用那些历史遗留下来的老系统，成为影响新系统建设成败和开发效率的关键因素之一。通常称这些老系统为遗留系统。

目前，学术和工业界对遗留系统的定义没有统一的意见。Bennett 在1995 年对遗留系统做了如下的定义：遗留系统是不知道如何处理但对组织又至关重要的系统。Brodie 和Stonebraker 对遗留系统的定义如下：遗留系统是指任何基本上不能进行修改...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-基于架构的软件设计]]></title><link>https://blog.csdn.net/ce123/article/details/109609934</link><guid>https://blog.csdn.net/ce123/article/details/109609934</guid><author>ce123</author><pubDate>Sun, 20 Dec 2020 22:06:20 +0800</pubDate><description><![CDATA[简介

基于架构的软件设计（Architecture-Based Software Design，ABSD）是一种架构驱动方法。这种方法有3 个基础：

（1）功能的分解。在功能分解中，ABSD 方法使用已有的基于模块的内聚和耦合技术。

（2）通过选择架构风格来实现质量和业务需求。

（3）软件模板的使用。软件模板利用了一些软件系统的结构。然而，对于设计方法来说，软件模板的使用是一个新概念，下面，我们进行简单的介绍。软件模板是一个特殊类型的软件元素，包括描述所有这种类型的元素在共享服务和底...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-软件重用之构件技术]]></title><link>https://blog.csdn.net/ce123/article/details/109609871</link><guid>https://blog.csdn.net/ce123/article/details/109609871</guid><author>ce123</author><pubDate>Sun, 13 Dec 2020 00:00:07 +0800</pubDate><description><![CDATA[软件重用技术是一种重要的软件开发方法，虽然至今软件重用技术还不够成熟，离理想中的软件工厂还有很长的路要走，但现有的一些重用技术（例如，中间件、应用服务器等）已经改变了开发过程。

软件产品与其他的产品不同，是抽象的，一旦产生就可以无限制地复制，因此重复利用软件产品的意义重大，可以节约大量的人力物力。软件重用指的是利用已经存在的软件元素建立新的软件系统，这其中的软件元素既可以是软件产品、源程序，也可以是文档、设计思想甚至是领域知识。软件重用可以直接提高软件的开发效率、降低软件的开发成本、缩短软件的开发周期、.]]></description><category></category></item><item><title><![CDATA[系统架构设计师-系统可靠性设计]]></title><link>https://blog.csdn.net/ce123/article/details/109699771</link><guid>https://blog.csdn.net/ce123/article/details/109699771</guid><author>ce123</author><pubDate>Sun, 06 Dec 2020 20:25:23 +0800</pubDate><description><![CDATA[系统可靠性定义

系统在规定的时间内及规定的环境条件下,完成规定功能的能力,就是系统无故障运行的概率。根据国家标准《软件工程 产品质量 第一部分：质量模型》（GB/T 16260.1-2006）的规定,系统可靠性的4个主要子特性成熟性：指系统避免因错误的发生而导致失效的能力。

容错性：在系统发生故障或违反指定接口的情况下,系统维持规定的性能级别的能力
	易恢复性：系统发生失效的情况下,重建规定的性能级别并恢复受直接影响的数据的能力
	依从性：系统依附于可靠性相关的标准、约定和规约的能力。
软件可靠性技术
]]></description><category></category></item><item><title><![CDATA[系统架构设计师-软件架构设计]]></title><link>https://blog.csdn.net/ce123/article/details/109684177</link><guid>https://blog.csdn.net/ce123/article/details/109684177</guid><author>ce123</author><pubDate>Sat, 28 Nov 2020 21:03:23 +0800</pubDate><description><![CDATA[软件架构作为一个有机的整体，可以分解成多个侧面来认识，每个侧面强调它的不同方面的特征，从而使架构设计师能整体地把握它的重点。我们可以将软件架构归纳成5 种模型：结构模型、框架模型、动态模型、过程模型和功能模型。最常用的是结构模型和动态模型。

（1）结构模型。这是一个最直观、最普遍的建模方法。这种方法以架构的构件、连接件和其他概念来刻画结构，并力图通过结构来反映系统的重要语义内容，包括系统的配置、约束、隐含的假设条件、风格、性质。研究结构模型的核心是架构描述语言。

（2）框架模型。框架模型与...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-简单分布式计算机应用系统的设计]]></title><link>https://blog.csdn.net/ce123/article/details/109611126</link><guid>https://blog.csdn.net/ce123/article/details/109611126</guid><author>ce123</author><pubDate>Sat, 21 Nov 2020 21:43:20 +0800</pubDate><description><![CDATA[网络极大地扩展了计算机的应用范围，同时，由于升级到更强的服务器的费用常常远远高于购买多台档次稍低的机器，更何况虽然计算机有了长足的发展，可是单台计算机的功能仍然十分有限，利用联网的计算机协同工作，共同完成复杂的工作成为相对成本较低的选择，而且可以完成单台计算机所无法完成的任务。分布式系统使得这一目标成为可能。另外，网络本质上并不可靠，特别是远程通信，分布式系统还带来了并发和同步的问题。分布式系统可以由两种完全不同的方式来进行协同和合作，第一种是基于实例的协作。这种方式所有的实例都处理自己范围内的数...]]></description><category></category></item><item><title><![CDATA[系统架构设计师-开发方法之构件组装模型]]></title><link>https://blog.csdn.net/ce123/article/details/109609805</link><guid>https://blog.csdn.net/ce123/article/details/109609805</guid><author>ce123</author><pubDate>Sun, 15 Nov 2020 17:00:46 +0800</pubDate><description><![CDATA[随着软构件技术的发展，人们开始尝试利用软构件进行搭积木式的开发，即构件组装模型。在构建组装模型中，当经过需求分析定义出软件功能后，将对构件的组装结构进行设计，将系统划分成一组构件的集合，明确构件之间的关系。在确定了系统构件后，则将独立完成每一个构件，这时既可以开发软件构件，也可以重用已有的构件，当然也可以购买或选用第三方的构件。构件是独立的、自包容的，因此架构的开发也是独立的，构件之间通过接口相互协作。构件组装模型的一般开发过程如下图所示。



构件组装模型的优点如下：

（1）构件的自包容性...]]></description><category></category></item></channel></rss>