自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 问答 (1)
  • 收藏
  • 关注

原创 音视频开发学习点点滴滴记录(1)-- ffmpeg下载及环境搭建

音视频开发学习记录今天开始学习音视频开发相关的知识,通过博客的形式与大家共同学习与进步关于音视频编解码的概念知识可以在百度上搜索,介绍的都是非常详细的学习ffmpeg我建议是先在windows平台上学习,然后再去linux上开发学习 介绍ffmpeg下载的方法 下载地址:https://ffmpeg.zeranoe.com/builds/ 我们...

2020-04-11 17:30:58 349

转载 linux 线程 信号量

信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆。一、什么是信号量线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值

2018-02-04 19:01:57 552

原创 linux 线程 条件变量

与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果条件为假,一个线程自动阻塞,并释放等

2018-02-04 18:22:24 437

原创 linux 多线程编程 互斥量

线程 互斥量 一 什么是互斥量互斥量是另一种用于多线程中的同步访问方法,它允许程序锁住某个对象,使得每次只能有一个线程访问它。为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁。二 互斥量函数的使用方法#include int pthread_mutex_init(pthread_mutex_t *mutex, const pthr

2018-02-04 17:26:55 405

原创 linux shell awk命令的简单使用方法

awk命令1 awk是一个强大的文件分析工具 2 使用方法awk '{pattern + action}' {filenames}其中 pattern 表示 AWK 在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。

2018-02-04 14:15:00 1266

原创 C++ 派生类的构造函数总结

1 简单的派生类的构造函数的一般形式 为: 派生类构造函数名(总参数表):基类构造函数名(参数表){派生类中新增数据成员初始化语句}2 有子对象的派生类的构造函数的一般形式为: 派生类构造函数名(总参数表):基类构造函数名(参数表),子对象(参数表){派生类中新增数据成员初始化语句}3 多层派生时的构造函数 不要列出每一层派生类的构造函数,只需写出其上一层派生类

2018-01-22 20:29:10 1802

原创 linux shell编程 从当前目录下查找指定文件,输出文件位置

#! /bin/bash#从当前目录下找出所有要查询的文件并输出文件位置echo start time=`date`echo -efunction func(){for file in `ls $2`do if [ -L $2"/""$file" ] then continue else if [ -d $2"/""$file" ] then path=$

2018-01-19 13:14:15 4626

原创 shell 编程 字符串 函数

# /bin/bash#定义变量类型declare -i sum=100+200+300echo $sum#数组array_name=(v0 v123456 v2 v3)#重新设置指定元素的数值array_name[2]=v22#输出元素的值echo ${array_name[2]}echo ${array_name[*]}echo ${array_name[@]}

2018-01-18 22:55:20 668

原创 linux Ubuntu安装samba服务器

下面以介绍Ubuntu16.04为例介绍安装samba服务器1 首先介绍一下samba有什么用:简短的说,samba是用来window平台与linux平台共享文件的2  Ubuntu安装samba的方法(1) 首先进行源安装sudo apt-get install samba-common samba (2) 安装完成后去Ubuntu上创建一个新用户

2017-12-13 21:37:44 506

原创 linux 线程创建 pthread_create函数 获取线程id

函数原型:#includeint  pthread_create(pthread_t*thread,pthread_attr_t   *attr,void * (*start_routine)(void *arg), void *arg); 参数  第一个参数为指向线程标识符的指针。  第二个参数用来设置线程属性。  第三个参数是线程运行函数的地址。  最后一个

2017-11-30 22:06:25 8288

原创 linux 线程等待与退出 pthread_join pthread_exit 函数

线程等待:函数:pthread_joinextern int pthread_join __P (pthread_t __th, void **__thread_return); 参数:第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待

2017-11-29 22:39:35 3862 1

转载 linux 进程间通信 消息队列

Linux下进程间通信方式:# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访

2017-11-27 22:02:59 308

转载 linux 进程间通信 信号量

这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行

2017-11-27 21:52:19 346

转载 linux 进程间通信 共享内存

一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影

2017-11-27 21:45:57 281

原创 linux C 进程结束 exit与_exit函数

exit与_exit函数都是进程正常退出的函数exit函数格式:#include void exit(int status);_exit函数格式:#include void _exit(int status);相同点:1 这两个函数都是正常退出进程2 不论调用是否成功,都没有返回信息不同点:1 exit函数会对输入输出流进

2017-11-27 21:25:35 747

原创 linux C进程 进程等待wait与waitpid函数

为什么要使用wait或waitpid函数:编程过程中,有时需要让一个进程等待另一个进程,最常见的是父进程等待自己的子进程,或者父进程回收自己的子进程资源包括僵尸进程。1. 孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程变为init进程 。2. 僵尸进程:子进程终止了,父进程尚未回收子进程,子进程残留资源(PCB)存放于内核中,子进程变成僵尸(Zombie)

2017-11-26 12:20:04 2316

原创 linux C 进程 创建进程 详解

最近一周复习和整理了一些进程相关的知识,所以结合书本与网上的知识整理了这篇博客 首先介绍一下进程的创建方法,fork与vfork函数fork函数    一个进程调用fork()函数后,系统先给新的进程分配资源,包括代码、数据和分配给进程的资源,然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。需要的头文件:#incl

2017-11-25 21:46:55 2453

原创 数据结构 队列入队,出队编程的例子

队列是先入先出的,即先入队的数据先出队下面这个程序具有入队,出队,遍历队列数据的功能#include #include typedef struct{ int* pBase; int front; int rear;}QUEUE;//初始化静态队列,创建能够存储5个数据的静态队列void Init_queue(QUEUE* _pQ){

2017-10-29 19:39:30 8051

原创 linux 创建用户useradd与adduser 删除用户userdel 创建删除用户组命令

下面介绍常用的创建创建与删除用户与用户组1 创建用户useradd + 用户名以创建用户test用户为例首先输入useradd   test  此命令是添加用户test然后输入passwd   test此命令是给test用户设置密码,如果没有设置密码的话此用户是无法登陆的此时已经添加用户成功接下来用 su test 命令登陆test用户

2017-10-27 22:23:41 3862

原创 linux命令 gzip bzip2 tar 压缩打包命令

一 gzip 命令格式: gzip 选项 文件gzip 是一个广泛使用的压缩工具,gzip压缩完成后会产生.gz的压缩文件,并删除原始文件 常用的选项:-d 解开压缩文件-f 强行压缩文件-r 递归处理,将指定目录下的所有文件及子目录一并处理-t 用来测试压缩文件的完整性,如果文件正常,gzip命令不会给出任何显示。如果要让gzip给出显示,可以使用-t

2017-10-20 19:21:49 525

原创 指向变量的常指针与指向常变量的指针变量的区别

一 指向变量的常指针形式: 类型名 *   const  指针变量名将指针变量声明为const型,这样指针变量始终保持为初值,不能改变,即其指向不能改变例#include #include int main(){ char cBuff1[100] = "1234"; char cBuff2[100] = "5678"; char * const

2017-10-15 16:09:47 1814 1

原创 数据结构 创建栈 压栈 删除栈顶元素 清空栈 遍历栈 例子

本例子讲述了如何创建一个栈,压栈即往栈里插入一个结点,删除栈顶元素,以及对栈里的结点进行清空,遍历栈里的结点#include #include #include #include typedef struct Node{ int data; //数据域 struct Node *pNext; //指针域}NODE, *PNODE;typedef str

2017-09-20 21:16:20 3202

原创 C++ 重载运算符 友元函数作为重载运算符 重载运算符+

以友元函数作为重载运算符的方式重载运算符+下面的例子来自于课本#include using namespace std;class Complex{ public: Complex() { real = 0; imag = 0; } Complex(double

2017-09-20 19:45:29 3099

原创 C++ 重载运算符 运算符重载函数作为类成员函数 重载运算符+

用运算符重载函数作为类成员函数的方法重载运算符+下面的例子来自于课本:#include using namespace std;class Complex{ public: Complex() //无参构造函数 { real = 0; imag = 0; } Co

2017-09-20 19:27:31 3166

原创 linux gdb set变量的值 例子(三)

以此程序为例,讲解gdb中set的用法#include int func(int i){ int j = 1; int p = 0; int q = 0; for(p = 0; p < 5; p++) { q++; printf("p =%d\n", p); printf("q =%d\n"

2017-09-11 22:43:59 5284

原创 数据结构 单链表删除结点 例子

单链表的删除是将下一个节点移到待删除的节点上,只需移动这两个位置,其他的位置不用变化,这也是链表的优点。而数组的删除则是将待删除数值之后的所有数据移动一遍。下面的程序是按照位置对链表的数值进行删除。#include #include #include typedef struct list { int vaule; //数据域 struct

2017-09-11 22:30:26 1885

原创 linux gdb的详细用法 打印 (二)

本次讲解一下在gdb中如何使用打印的功能#include int func(){ int p = 0; int q = 0; for(p = 0; p < 5; p++) { q++; printf("p = %d\n", p); printf("q = %d\n", q); } retu

2017-09-06 20:12:40 6583

原创 linux gdb的详细用法 运行与断点(一)

gdb是调试程序,跟踪问题的一个非常好的手段,下面将详细的进行介绍它的具体用法下面以gdb_test.c程序为例介绍#include int func(){ int p = 0; int q = 0; for(p = 0; p < 5; p++) { q++; printf("p = %d\n", p);

2017-09-04 20:36:45 36112 1

原创 数据结构 单链表的插入详解 例子

最近看了郝斌老师讲的数据结构的单链表插入的视频,觉得视频中链表插入的算法写的很经典,所以就把代码敲了一下分享给大家#include #include #include typedef struct list { int vaule; //数据域 struct list *PNext; //指针域 }TNODE, *TPNODE; T

2017-08-30 22:06:33 3366

原创 数据结构 求链表的长度以及用冒泡排序的算法对链表中的值进行排序

在创建好一个链表后,并且对链表中结点中数据域赋予值后,可以对各节点中的数据域的值进行排序,并且可以求出链表的长度如何求出一个链表的长度:在前面的博客中讲到对链表的遍历输出,其实链表的长度的求法和链表的遍历很相似,首先判断第一个结点是否为空,如果第一个结点为空,直接返回,说明此链表为空,长度为0。如果第一个结点不为空,将长度加一,再进行指向第二个结点,判断第二个结点是否为空,如果为空

2017-08-25 20:12:50 1163

原创 数据结构 冒泡排序文字与图示详解及冒泡编程例子

冒泡排序可以对一组数据进行从小到大或者从大到小进行排序下面对数据从小到大的冒泡排序进行介绍:图示:小的数值在左面,大的数值在右面,就像水中冒泡一样,越来越大。以4个数值5,3,6,2进行排序为例介绍进行第一次排序    首先将第一个数值与第二个数值进行比较,第一个数值为5,第二个数值为3,5>3,将5与3的位置交换,此时为3,5,6,2。然后进行第二个数值与

2017-08-24 18:59:10 2410

原创 linux, 使用vprintf,va_list函数封装一个具有printf功能的函数

要想封装一个自定义的具有printf功能的函数,需要使用vprintf函数和va_list函数。下面的一个例子封装了一个具备打印出日期时间的函数,其中使用了时间函数,time_t, localtime函数。使用下面的my_printf函数进行输出,可以不用输入\n,函数会自动判断进行换行,读者可以自行研究一下这个函数哦。#include #include #include #in

2017-08-19 23:09:26 2145 1

原创 C++ 私有继承

在声明一个派生类时将基类的继承方式方式指定为private的,称为私有继承谨记这两点:1, 私有基类的公用成员和保护成员在派生类的访问属性相当于派生类中的私有成员,只有派生类的成员函数能访问,在派生类外不能访问。2, 私有基类的私有成员仍为基类私有,所以只能基类的成员函数能访问,则派生类不可访问。#include #include using namespace std

2017-08-17 22:28:44 318

原创 shell 双引号"" 单引号'' 反引号`` 的区别

双引号,单引号,反引号是shell编程中常用到的符号,下面简单介绍一下它们的区别双引号能忽略绝大部分符号的特殊含义,但$  \  ` 这三个字符依然保持其特殊含义例如, name=qwerecho $name$代表解释变量的值所以加上双引号含义是一样的 echo  "$name"#!/bin/bashname=qwerecho $nameecho

2017-08-16 21:45:39 472

原创 shell for循环编程

在shell编程中,for循环语句的编程的格式为 for 变量 in × ×do......done将in后面的数据一一的输入到变量里面,先输入第一个,然后执行do后面的语句,然后输入第二个,执行do后面的语句,以此类推,直到输入完毕例子:#shell_for for循环#!/bin/bashfor i in 1 2 3 4 5 6do

2017-08-16 21:19:00 395

原创 C++ 公用继承

C++的继承方式分为 公用继承,私有继承,保护继承建立一个派生类时,将基类的继承方式指定为public,则为公用继承。1 公用继承时,基类的公用成员和保护成员仍然为公用成员和保护成员的属性。2 基类的私有成员,仍为基类的私有成员,只能用基类的成员函数去引用它,所以派生类的成员函数不能引用基类的私有成员。访问属性基类的访问属性继承方式在派生

2017-08-15 23:31:07 705

原创 shell编程 if语句

今天开始学习shell编程,通过看书,练习了几个基本的小例子,下面总结一些知识点分享给大家if 语句包括 字符串测试,文件测试,数字测试基本的语法为if test commandthen********else********fi或if  [ command ]then********else********fites

2017-08-14 21:29:31 684

原创 创建链表的小例子

在新学习数据结构中,链表是一个不太容易理解的知识点,下面编写一个创建链表和输出链表的小例子来解决在学习链表中的困惑/*创建链表,打印链表信息*/#include #include typedef struct list{ int vaule; //数据域 struct list *PNext; //指针域}TNODE, *TPNODE;TPNODE C

2017-08-13 14:43:42 737

原创 在linux系统下编程,解决scanf不能输入空格的问题

在linux系统下,使用scanf函数不能输入空格,所以编者就自己封装了一个EncapScanf函数,希望可以帮助到读者。#include #include #include int EncapScanf(char *_pcBuffer)  //封装输入函数,解决scanf不能输入空格问题{    int iRet = 0;    setbuf(st

2017-08-11 23:01:57 2604 1

空空如也

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

TA关注的人

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