c/c++
文章平均质量分 92
操作系统架构
仅记录自己的一些思考或剽窃别人的一些优秀思考|Random thoughts of an embedded-kernel hacker.
展开
-
volatile
volatile,linux原创 2023-03-13 16:51:52 · 679 阅读 · 0 评论 -
C11新特性记录
/************************************************************************* > File Name: c11_attributes.c > Created Time: Mon 14 Dec 2020 09:03:49 AM CST ************************************************************************/#include <stdio.原创 2020-12-15 09:34:54 · 194 阅读 · 0 评论 -
gcc 泛型宏与通用预定义宏示例
#include <cstdio>#include <iostream>#define min(x, y) ({ \ typeof(x) _tempx = (x);\ typeof(y) _tempy = (y);\ (void)(&_tempx == &_tempy);\ _tempx < _tempy ? _tempx : _tempy;})int main(){ int a = 10, b = 12; double x =.原创 2020-12-12 10:35:56 · 340 阅读 · 0 评论 -
C计算机编程语言优化(Optimization of Computer Programs in C)
原著:Optimization of Computer Programs in C摘要:一个知识工作者的一生的大部分时间都花在等待计算机持续产生结果上。用户和组织通过购买更快的计算机,添加内存,使用更快的网络来控制他们的等待时间。应用程序开发者有责任去设计他们的程序,以便更好的利用他们手里有限而昂贵的资源。本文论述了一些优化(提升速度)c计算机编程语言的技术。主要聚焦在最小化CPU运行程序...翻译 2020-01-09 09:48:33 · 720 阅读 · 0 评论 -
C 实现封装继承多态
0. 概述> 通过struct 实现封装> 通过函数指针实现虚表> 成员包括:属性 和 方法> 属性使用普通的数据类型,方法使用函数指针类型> 通过函数指针成员 提供 对象./-> 成员的访问形式> 通过包含父类的实例对象super 实现继承关系> 通过在子类中实现虚表中的方法,修改父类中的虚表指针指向子类实现的虚表实例来实现多态&g...原创 2019-10-12 17:45:02 · 153 阅读 · 0 评论 -
《深入理解-快速排序》
快速排序本质是一种切分交换比较思想:对数组N array[10] = {88, 22, 66, 77, 55, 44, 33, 99, 11, 0};选array[0]为参考对象,选两个索引i,j,i指向数组第二个array[1],j指向数组末尾array[9];向右滑动 i, 如果array[i] > 88 && i 改为向左滑动j, 如果array[j] = 0, 并且j>原创 2017-09-30 16:39:19 · 290 阅读 · 0 评论 -
《图的深度优先搜索和广度优先搜索》
1. 代码/************************************************************************* > File Name: dfsbfs.cpp > Author: XXDK > Email: v.manstein@qq.com > Created Time: Sun 05 Nov 2017 09:53:40 PM CST原创 2017-11-05 22:00:16 · 222 阅读 · 0 评论 -
C/C++混合编程中的回调问题
/************************************************************************* > File Name: ptc.cpp > Author: XXDK > Email: v.manstein@qq.com > Created Time: Thu 01 Feb 2018 04:43:48 PM CST ********原创 2018-02-02 19:46:08 · 169 阅读 · 0 评论 -
C++发布订阅者模式demo
#ifndef _OBSERVER_H_ #define _OBSERVER_H_ #include #include using namespace std; class Msg { public: virtual int GetMsgID() = 0; virtual void* GetMsg() = 0;转载 2018-02-05 16:50:51 · 2538 阅读 · 0 评论 -
二维码解析库zbar+openCV的移植和使用
-----------------------------1. zbar linux-X86平台编译-----------------------------./configure --without-imagemagick --disable-video --without-qt --without-gtk --without-x --without-python --exec-pr原创 2017-09-21 14:53:54 · 2243 阅读 · 3 评论 -
mmap实现共享内存,采用信号量同步
服务端将数据发送到共享内存段:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<sys/mman.h>#i...原创 2017-04-25 18:21:49 · 485 阅读 · 0 评论 -
linux文件拷贝(进程方法)
文件拷贝,父进程拷贝该文件的前一半,子进程拷贝后一半/************************************************************************* > File Name: work.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Wed 15 Mar 201原创 2017-03-15 19:34:16 · 527 阅读 · 0 评论 -
linux创建守护进程
精灵进程它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件:创建守护进程的步骤:1、创建子进程,父进程退出此时,子进程为孤儿进程,与终端脱离的部分关系2、在子进程中创建新会话 => setsid()此时,子进程为新建会话组的组长, 彻底脱离于原bash会话组的关系3、改变当前目录为根目录 =>chdir(“\”);保证守护进程工作环原创 2017-03-15 19:16:24 · 178 阅读 · 0 评论 -
linuxC函数之exec
exec函数族用来在当前进程中载入可执行文件,替换当前的数据段和代码段,而后执行载入的可执行文件,其后缀释义如下:1. “l”,以列举的方式传参如:execl("/bin/ls", "ls", "-a", "-l", "-i", NULL);1. “v”,以指针数组的方式传参如:char* buf[] = {"ls", "-a", "-l", "-i", NULL};e原创 2017-03-15 18:48:42 · 300 阅读 · 0 评论 -
linux静态库与共享库
A.静态库的创建与使用:1.通过gcc -c xxdk.c 生成目标文件=> xxdk.o2.通过ar crs -o libxxdk.a xxdk.o 生成静态库 => libxxdk.a3.通过gcc main.c -o main -L. -lxxdk 链接静态库编译,生成可执行文件main4.执行main即可B.动态库的创建和使用:1.通过gcc -c xxdk.c原创 2017-03-14 18:50:19 · 300 阅读 · 0 评论 -
C++封装SDK的一种方法(接口与实现分离)
1. 假设一个module包含三个sub module SubModuleA,SubModuleB,SubModuleC2. 现在要将该模块暴露sdk给客户,我们不想直接将模块实现的头文件暴露出去3. 可以考虑接口与实现分离的设计模式 ├── module │ ├── module_implement.cpp │ ├── module_implement.hpp ...原创 2018-03-19 19:10:51 · 11591 阅读 · 0 评论 -
C++封装SDK的另一种方法(抽象接口和静态方法)
1. 假设一个module 名为ModuleImplement2. 现在要将该模块暴露sdk给客户,我们不想直接将模块实现的头文件暴露出去3. 多态工具+工厂设计模式├── client_test.cpp├── module│ ├── libmodule.so│ ├── ModuleImplement.cpp│ ├── ModuleImplement.hpp│ ...原创 2018-03-26 12:18:14 · 2450 阅读 · 0 评论 -
观察者模式
/************************************************************************* > File Name: publish-subscribe.cpp > Author: XXDK > Email: v.manstein@qq.com > Created Time: Wed 02 May 2018...原创 2018-05-02 17:24:38 · 176 阅读 · 0 评论 -
一种C语言多态的实现示例
1. 抽象的shape类/************************************************************************* > File Name: shape.h > Author: XXDK > Email: v.manstein@qq.com > Created Time: Thu 12 Sep 2019 ...原创 2019-09-20 20:31:01 · 262 阅读 · 0 评论 -
记录一个linux内核链表使用示例
1. 链表文件:#ifndef __ULIST_H__#define __ULIST_H__/* * Simple doubly linked list implementation. * * Some of the internal functions ("__xxx") are useful when * manipulating whole lists rather than...原创 2019-08-29 20:12:08 · 366 阅读 · 0 评论 -
container_of学习记录
container_of 主要用于已知某个成员的地址: ptr该成员的名称:member;包含该成员的类型:struct container{…, member,…};得到包含该成员的类型的实例的地址,简释如下:#include<stdio.h>#include <stddef.h>/**< build in macro * #define ...原创 2019-04-05 16:06:13 · 152 阅读 · 0 评论 -
从汇编代码分析: C程序调用过程
源代码int func(int a, int b);int m = 10;int main(){ int i = 4; int j = 5; m = func(i, j); return 0;}int func(int a, int b){ int c = 0; c = a + b; return c;}gcc -S test.c 得到x86-64 汇编...原创 2018-10-16 15:03:10 · 379 阅读 · 0 评论 -
轻盈曼妙,欲语还羞C++之: unique_ptr
c++ unique_ptr/************************************************************************* > File Name: unique_ptr_self.cpp > Author: XXDK > Email: v.manstein@qq.com > Created Time: Tu...原创 2018-09-18 12:23:56 · 159 阅读 · 0 评论 -
轻盈曼妙,欲语还羞C++之: std::unique_ptr
C++ std::unique_ptr/************************************************************************* &gt; File Name: unique_ptr.cpp &gt; Author: XXDK &gt; Email: v.manstein@qq.com &gt; Created Time: Tu...原创 2018-09-18 10:54:31 · 448 阅读 · 0 评论 -
设计模式之:蓝本模式(prototype)
C语言实现/************************************************************************* &amp;gt; File Name: prototype.c &amp;gt; Author: XXDK &amp;gt; Email: v.manstein@qq.com &amp;gt; Created Time: Mon ...原创 2018-09-10 18:58:02 · 178 阅读 · 0 评论 -
设计模式之:单例模式(singleton)
/************************************************************************* &amp;gt; File Name: singleton.cpp &amp;gt; Author: XXDK &amp;gt; Email: v.manstein@qq.com &amp;gt; Created Time: Wed 05 Sep ...原创 2018-09-05 19:46:18 · 141 阅读 · 0 评论 -
C标准IO的fread和fwrite
使用fread和fwrite操作文件/************************************************************************* > File Name: frw.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Mon 13 Mar 2017 01:44:4原创 2017-03-13 20:03:18 · 924 阅读 · 0 评论 -
C标准IO实现文件拷贝
实现类似cp的功能,并且统计文件行数/************************************************************************* > File Name: fgp_copy.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Mon 13 Mar 2017 12原创 2017-03-13 19:57:53 · 2506 阅读 · 0 评论 -
linux进程间通信之信号
用信号的知识实现司机售票员问题:1、售票员捕捉SIGINT(代表开车)信号,向司机发送SIGUSR1信号,司机打印("let's gogogog")2、售票员捕捉SIGQUIT(代表停车)信号,向司机发送SIGUSR2信号,司机打印("stop the bus")3、司机捕捉SIGTSTP(代表车到终点站)信号,向售票员发送SIGUSR1信号,售票员打印("please get off原创 2017-03-17 19:29:43 · 1084 阅读 · 0 评论 -
linux进程间通信之有名管道
生产者进程/************************************************************************* > File Name: named_pipe_w.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Thu 16 Mar 2017 10:51:22 PM原创 2017-03-17 19:15:23 · 359 阅读 · 0 评论 -
linux进程间通信之无名管道
/************************************************************************* > File Name: pipe.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Thu 16 Mar 2017 08:54:03 PM PDT *********原创 2017-03-17 19:11:16 · 319 阅读 · 0 评论 -
linux线程互斥与同步
线程互斥,解决多个线程访问同一资源时的竞态问题:/************************************************************************* > File Name: mutex.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Wed 15 Mar 2017原创 2017-03-17 19:06:22 · 287 阅读 · 0 评论 -
linux线程与volatile
/************************************************************************* > File Name: volatile.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Thu 16 Mar 2017 12:24:46 AM PDT *****原创 2017-03-17 18:53:57 · 260 阅读 · 0 评论 -
linux线程池示例
池类封装:/************************************************************************* > File Name: tpool.h > Author: XXDK > Email: v.manstein@qq.com > Created Time: Thu 16 Mar 2017 06:17:34 PM PDT *原创 2017-03-17 18:39:26 · 273 阅读 · 0 评论 -
已知指向节点p的指针,如何删除该节点(不知道链表头)
/************************************************************************* > File Name: deleteNode.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Tue 07 Mar 2017 05:25:25 PM PST ***原创 2017-03-08 09:38:05 · 1627 阅读 · 0 评论 -
C链栈基础
/************************************************************************* > File Name: stack.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Tue 07 Mar 2017 04:22:40 AM PST ********原创 2017-03-08 09:10:38 · 220 阅读 · 0 评论 -
C指针的探索A
有如下代码/************************************************************************* > File Name: point.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Thu 02 Mar 2017 11:06:13 PM PST ***原创 2017-03-03 19:47:25 · 170 阅读 · 0 评论 -
c++11的右值引用&&
在pixhawk中看到如下代码: template OwnPtr& operator=(OwnPtr&& other) { T *old = _ptr; _ptr = other.leak(); delete old; return *this; }解析摘录如下: http://www.cnblo原创 2017-02-22 16:28:38 · 9862 阅读 · 0 评论 -
C++中的默认函数与default和delete用法
在pixhawk拜读中发现如下写法: /* non-copyable */ OwnPtr(const OwnPtr &other) = delete;查找的解释如下:一、类中的默认函数 a.类中默认的成员函数 1.默认构造函数 2.默认析构函数 3.拷贝构造函数 4.拷贝赋值函数 5.移动构造函数 6.移原创 2017-02-22 14:58:04 · 630 阅读 · 0 评论 -
C++派生类中如何初始化基类对象
C++派生类中如何初始化基类对象http://www.cnblogs.com/GODYCA/archive/2013/01/17/2865279.html今天收到盛大的面试,问我一个问题,关于派生类中如何初始化基类对象,我在想派生类对于构造函数不都是先构造基类对象,然后在构造子类对象,但是如果我们在成员初始化列表先初始化派生类的私有成员,在函数内去调用基类的构造函数,能转载 2017-02-20 11:08:46 · 3319 阅读 · 0 评论