自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Atom丶的博客

通往成功的第一步

  • 博客(47)
  • 问答 (2)
  • 收藏
  • 关注

原创 高版本 MacOS 系统安装旧版 XCode 提示版本过低请前往 Apple Store 下载的解决方法

若要使用“Xcode”,您需要更新到最新版本

2022-07-29 10:21:19 9655 1

原创 Conan 使用包时报错 dyld: Library not loaded: @rpath/libhello.dylib

Mac 上 Conan 链接动态库报错dyld: Library not loaded: @rpath/libhello.dylib1. 今天在使用 conan 包进行测试 Demo 时,在 Mac 上出现了编译出来的可执行程序链接不到使用 conan 包的动态库,但是在 Linux 上可以正确链接,最后在官方文档里找到解决办法记录一下,CMakeLists.txt 里面conan_basic_setup(KEEP_RPATHS) 加上 KEEP_RPATHS 就可以了,主要是系统找不到这个动态库路..

2021-04-23 11:53:49 746

原创 ffmpeg: moov atom not found

ffmpeg: moov atom not found记录一次 ffmpeg 封装 mp4 文件播放不出来。使用 ffplay 报错 moov atom not found。如果在合成 mp4 时(不包括任何编解码)ffmpeg 提示各种 Assertion next_dts >= 0 failed at src/libavformat/movenc.c:1025等报错信息基本上都是在调用 av_interleaved_write_packet 写文件的时候不正确,这里我的写视频和写音频 pack

2021-01-22 10:11:24 17608 1

原创 FFmpeg 音视频编解码学习,分别用 C 语言,C++ 实现,基于 FFmpeg 4.2 API

代码和注释见 Githubhttps://github.com/Atom-pro/ffmpeg-demo

2020-09-30 18:08:52 931

原创 ROKID开发板初使用

ROKID OS简介RokidOS 是一个针对多种不同设备类型打造的开放源代码以语音交互为特色的软件堆栈。RokidOS 主要目的是为运营商、设备制造商、DesignHouse 和开发者创造一个开放的软件平台,使他们能够将创新理念变为现实,并推出能够卓有成效地改善用户体验的真实产品。1、配置编译环境     在做之前先配置一下编译所需的环境(就是下载一些所需的安装工具),R

2018-01-10 17:44:13 2540 1

原创 shell脚本截取字符串

shell脚本截取字符串1、使用#截取,删除左边字符,保留右边的echo ${变量名+#*加起始位置}结果val表示变量名,#是分隔符,*表示删除,//表示删除//以及左边所有2、使用##号截取,*删除 echo ${val##*w}结果*w表示删除最后一个w以及左边的所有3、使用%

2017-08-07 09:24:01 1066

原创 Linux进程池、线程池

Linux进程池、线程池一个子进程是通过进程动态内存分配的方式创建的,这种创建子进程的方式虽然能够获得资源,但是是有很多缺点的1、动态创建进程是比较耗时间的,这将导致较慢的客户响应。 2、动态创建的子进程(或子线程)通常只用来为一个客户服务。这将导致系统上产生大量的进程(线程),这将使进程间(线程)间切换消耗大量的CPU资源。 3、动态创建出来的子进程(线程)是父进程(

2017-08-07 09:13:42 1746

原创 虚函数表&&多态模型

虚函数表&&多态模型在虚拟继承时,在派生类中会有偏移量表格指针,用来指向偏移量表格。在多态中如果派生类将基类的虚函数重写之后,那么基类中的虚函数和派生类中的虚函数在内存中的存储位置又是什么样的呢?单继承多态模型1.class Base2.{3.public:4. virtual void Funtest1()5. {6. cout"Base::Funt

2017-07-28 18:42:52 924

原创 String类

#define _CRT_SECURE_NO_WARNINGS 1#include #include using namespace std;class String{public: String(const char *str = " ") :_str(new char[strlen(str)+1]) ,_size(strlen(str)) ,_capacity(_s

2017-07-28 15:34:29 307

原创 C++多态

C++多态多态是C++三大特性之一。 简单来说多态就像是“一个接口,多种形态”。多态根据函数地址绑定的先后次序可以分为静态多态和动态多态。静态多态:函数的调用是在编译期间完成的(静态绑定。函数重载)。 动态多态:函数的调用时在程序运行期间完成的(动态绑定。函数重写)要实现动态绑定,要有两个条件。1、必须是虚函数。 2、通过基类类型的指针或引用

2017-07-28 15:30:22 536

原创 UDP套接字编程

UDP套接字编程udp是一种无连接的不可靠传输协议,和tcp最大的区别就是不需要建立可靠连接,直接就可以发送数据,也不需要保证数据可靠性传输,优点是快速,不需要消耗太多资源。UDP套接字编程时,不需要像TCP那样去监听看谁连接上了,然后在accpet,因为是无连接所以绑定之后直接发送消息。UDP_SERVER1.#include2.#include 3.#include

2017-07-28 13:38:08 487

原创 TCP套接字编程

TCP套接字编程在实现一个主机上的不同进程相互之间通信,可以用管道、信号量或者共享内存来实现。如果要实现网络中不同进程间的通信就要使用套接字编程来实现。一个套接字就是一个IP地址和这个IP地址上的唯一端口号。server1.#include 2.#include 3.#include 4.#include 5.#include 6.#include 7.#include 8.9

2017-07-28 13:30:56 435

原创 剖析C++5种继承模型

剖析C++5种继承模型单继承若一个子类(派生类)只有一个父类(基类)时,叫单继承。 若一个子类(派生类)有有多个父类(派生类)时,叫多继承。 先来看看单继承模型1.class C2.{3.public:4. C()5. {6. cout"C()";7. }8.9. int _c1;10.};11.12.class B: public

2017-07-25 09:48:41 489

原创 C++继承

C++继承继承是C++中一种重要的对象复用手段,并且也是以后实现多态的基础在类中有三种访问限定符:public、protected、private。所以在继承方式上也就有三种方式的继承:分别是1、公有继承(关键词:public) 2、保护继承(关键词:protected) 3、私有继承(关键词:private)一般的继承格式为 class 子类:访问

2017-07-24 15:58:33 350

原创 C++类实现顺序表和双向链表

C++类实现顺序表与双向链表顺序表1.#include 2.#include 3.using namespace std;4.5.typedef int DataType;6.7.class Seqlist8.{9.public:10. Seqlist()11. :_pData(new DataType[3])12. ,_capacity(3)13.

2017-07-21 17:27:52 403

原创 通俗易懂的CRC循环校验

CRC编码,也称为多项式编码。它是在数据通信中常用的一种差错校验码。由信息字段和校验字段组成。其中信息字段和校验字段长度可以任意选定。

2017-07-09 00:21:39 7595

原创 复数类实现

实现复数类的++、–、+、-、比较大小等

2017-07-06 22:55:31 448

原创 日期计算器

生活中我们可能要计算一些距某一个时间还有多少天的时候,但是在日历里算起来可能要麻烦一下,在学了C++的类之后可以很好的解决这一类的问题。例如距高考还有多少天、100天之后是几号等。 接下来就用日期类完成这些基本的日期运算功能

2017-07-06 22:36:41 6949

原创 C++的6种默认函数及运算符重载

C++类和对象我们知道C语言是面向过程的编程语言,而C++是面向对象(OPP)的编程语言。 面向对象是一种程序设计范型,也是一种程序开发的方法。而对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装在里面,以提高软件的重要性、灵活性和扩展性。 类(class)是C++中的特有的,形似于C语言中的结构体! 类有三大特性:封装、继承、多态 在一个类中,可以分为两种对象

2017-07-04 22:16:02 4676

原创 C++入门知识

C++命名空间命名空间是ANSI C++引入的可以有用户命名的作用域,用来处理程序中常见的同名冲突。 在做一些大型工程的时候往往需要用户定义头文件,当一个工程中有好多头文件时,而这些头文件中有很多相同的变量名,编译器在进行预编译处理的时候,头文件中的内容取代了对应的#include指令,这样就在一个程序文件中出现了好几个相同的变量名,这时候编译器也不知道这个变量名代表哪一个,所以会在编

2017-06-20 09:07:02 804

原创 链表面试题(进阶)&&复杂链表的复制

复杂链表的复制,链表面试题

2017-06-17 22:49:35 295

原创 线程的死锁及算法避免

线程下的死锁死锁是什么?是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。举个例子:你有一千万现金,现在要分别放在两个保险柜里,你把第一个保险柜的钥匙放在了第二个保险柜里了,然后不小心把第二个保险柜锁住了。接着又把第二

2017-06-17 20:13:36 528

原创 Linux多线程编程

Linux多线程编程线程的概念 在linux中,描述一个进程是用PCB来表示,并且每一个进程都有各自独立的地址空间。也就是说每一个进程都是一个控制流,如果要是在一个进程在执行多个控制流,这时候就有了线程的概念。 线程其实就是在进程内部空间运行的进程,在linux中没有真正意义上的线程概念,只不过是用进程来模拟线程。所以linux中的线程也叫做–轻量级进程。在进程中,我们知道

2017-06-17 18:56:41 536

原创 进程间通信--共享内存

进程间通信前面已经提到了两种system V版本的通信机制(消息队列和信号量)。接下来写一下另外一种system V的通信机制--共享内存共享内存在所有的通信方式里是最快的,这离不开它的机制;先来看看为什么共享内存的速度这么快共享内存原理:同一块物理内存被映射到两个进程各自的虚拟内存空间上,然后两个进程访问自己的虚拟内存相当于访问到了另一方的虚拟内存,因为它俩之间不需要建立

2017-06-13 19:51:02 755

原创 生产者与消费者模型

Linux中的消费者与生产者模型当两个线程同时访问一块临界区域的时候,一个进程往这块区域中写数据,另一个进程在里面读数据,会有很多种的情况。被访问的这块临界区域通常叫缓冲区,而往这块缓冲区里写数据的叫生产者,在这块缓冲区里读数据的叫消费者。 要实现消费者与生产者的关系,要满足一个原则,就是“321“原则。 3代表的是有三个关系、2代表的是两种角色、1就是一个交易场所

2017-06-13 18:09:14 1917

原创 单链表常见面试题(基础篇)

1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 2.从尾到头打印单链表 3.删除一个无头单链表的非尾节点 4.在无头单链表的一个节点前插入一个节点 5.单链表实现约瑟夫环 6.逆置/反转单链表 7.单链表排序(冒泡排序&快速排序) 8.合并两个有序链表,合并后依然有序 9.查找单链表的中间节点,要求只能遍历一次链表 10.查找单链表的倒数第k个

2017-06-13 14:20:12 497

原创 进程间通信-信号量

信号量实质上是一个用来描述临界资源数目的计数器。

2017-06-09 12:55:58 338 1

原创 数据结构——单链表

前面介绍了顺序表的特点和实现!但是顺序表有很多的不足,比如要给顺序表的前面插入一个数据,就必须先把后面的数据先一个一个的往后挪动,然后再将所要插入的数据放进去。就相当于一个数组一样。还有就是顺序表的大小分配,如果采用静态分配内存的方式,那么势必就会造成剩余内存的浪费,不利于CPU工作。要是用动态内存分配,可以减少内存浪费情况,但是一次性开辟的内存不能太大也不能太小,遇到一个结构体数据刚

2017-06-08 23:38:53 760

原创 管道实现进程间通信

一、实现进程间通信最简单的方式就是通过管道机制来实现,管道是一种最基本的IPC机制,由pipe函数创建。pipe所创建的管道实际上是在内核中开辟一块缓冲区,它有一个独端和写段,通过read和write来实现往管道里写和读,由于管道是通过父进程调用pipe函数所产生的管道,所以和它通信的只能是它的子进程或者和它有血缘关系的进程。后面一会具体讲。先通过图示来看看管道是怎么来实现通信的

2017-06-07 15:38:35 1462

原创 注释转换-小程序

编写代码时会有多种注释方式,但有的编辑环境不识别其他的注释方式,因此做个小项目来实现将注释方式统一的改为一种。本次注释转换这个小项目就是将所有的C注释全部转换为C++注释。要实现这个转换就要先理清实际过程中代码都有哪几种状态!所以先来列一个状态转换机来梳理一下什么情况是什么状态。简单考虑有以下几种状态:1、无状态:代码的正文部分2、C状态:注释方式为C注释3、C++状态

2017-06-06 23:50:26 1553

原创 消息队列实现进程间通信

进程间通信—IPC(InterProcess Communication)进程间通信是不同的进程通过一个或多个文件来传递信息。经常用到的通信方式有两种,一种是通过管道来实现两个进程间的通信,管道机制是创建的不同进程通过调用管道函数在内核中开辟一块空间来实现。而还有一种方式就是使用system V标准,来实现不同进程间的通信,下来就浅谈一下system V标准中的第一种通信方式——消息队

2017-06-06 21:57:02 1937 1

原创 顺序表的动态内存实现

线性表的顺序存储结构就是,把线性表中的所有元素按照其逻辑顺序依次存储在计算机存储器中指定存储位置开始的一块连续的存储空间中。因此,线性表的顺序存储结构是利用数组来实现的,数组的基本类型就是线性表中元素的类型。实现一个顺序表首先要制定一个顺序表的长度和存放数据的地址,还必须有已经存放的数据数量和总数量,顺序表的实现可以是静态的也可以是动态的,不过静态比较浪费内存,所以采用动态内存分配来实现顺序表

2017-05-31 09:51:36 685

原创 使用动态内存分配的通讯录实现

实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人静态内存开辟点击打开链接上一篇博客写出了先给结构体开辟一块大

2017-05-17 17:12:16 712

原创 C语言的简易通讯录

在我们的平常生活中常常会用到电话通讯录,常用的功能有添加联系人,删除,查找,删除,清空,显示,按姓名排序等现在我们就来实现以下要求的简易通讯录实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显

2017-05-15 14:13:12 911

原创 C语言字符串操作符的解读,模拟

我们平时写代码对字符进行操作时,常常会用到库函数里的字符操作符,那这些库里的操作符究竟是怎么计算的,现在我们来对这些库函数进行剖析,并且来模拟实现一下常见的库函数字符串操作符1、strcmp2、strcpy3、strcat4、strstr5、strchr6、strlen7、memcpy8、memmove1、strcmp先来看看库函数里的s

2017-05-10 00:57:31 572

原创 数组与指针的理解

本文对一些常见的指针进行了剖析,笔者是初学者有的地方可能说的不好,还请大佬们补充说明,不胜感激!

2017-05-08 15:45:56 672

原创 C语言下程序的堆栈调用(详细,图示)

以前接触程序时,只知道程序写的对,一般都能运行出来,但是却不知道程序是怎么一步一步将每一步编译链接起来的,今天我们用汇编来看一下程序到底是怎么在程序中运行的。

2017-04-18 19:10:48 10289 2

原创 C语言写的扫雷小程序

还记得上初中那会,上信息课都在电脑上玩的扫雷吗?那时候只会玩,不知道怎么实现,现在有了这个能力,也写了一个,虽然很糙,但还是能凑合玩的。废话不多说,直接上代码#define _CRT_SECURE_NO_WARNINGS 1#ifndef __GAME_H__#define __GAME_H__#include #include #include #include #

2017-04-12 21:09:41 499

原创 CenOS6.5连不上外网解决方法

在CenOS下,很多人把网络配置正确后能够ping通自己的主机和域名,但是却不能ping通外网,像ping www.baidu.com 、ping 8.8.8.8、 ping 114.114.114.114 这类的公网和域名,下来我写一下我自己的设置和解决方法首先,打开VM的编辑栏里的虚拟机网路编辑器,点到VMnet8处,我这里设置的是NET模式,将底下的使用本地DHCP服务将IP地址分给

2017-04-11 16:49:36 6117 2

原创 C语言下的创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。

#define _CRT_SECURE_NO_WARNINGS 1#include #include #include void menu(){ printf("*********** 0、初始化数组 **********\n"); printf("*********** 1、清空数组 **********\n"); printf("*********** 2、逆置数组

2017-04-09 17:05:41 567

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除