互斥量属性 四、互斥锁属性线程和线程的同步对象(互斥量,读写锁,条件变量)都具有属性。在修改属性前都需要对该结构进行初始化。使用后要把该结构回收。我们用pthread_ mutexattr_init函数对pthread_mutexattr结构进行初始化,用pthread_mutexattr_destroy函数对该结构进行回收。4 名称:: pthread_mutexattr_init/pthread_mutexattr_destroy 功能: ...
tcp三次挥手四次握手 作者:zhanyd链接:https://www.zhihu.com/question/63264012/answer/1774227296来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。很久很久以前,还没有互联网,大家通信主要靠写信。小扎和小美是高中同学,互相有好感,大学两个人去了不同的城市上学。小扎在大学感到了空虚寂寞冷,鼓起勇气写信向小美表白。小扎寄出去信后,心里一直很紧张,又怕万一地址不对,信寄不到怎么办呢?小美收到小扎的信后,按耐不住心中的惊喜.
数组指针和指针数组的区别 数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]p++; //该语句执行过后,也就...
不建议用memset初始化指针 先运行一段代码:int main(){ char* f;//不进行赋值,此时无法访问F指针,错误写法,实际不建议这样写code memset(f, 0, sizeof(f)); if(NULL == f) //成立,此时的f变为能够使用的指针,虽然指针为空 printf("f指针为空"); return 0;}一般情况下,给空指针赋值为NULL,初始化一块内存,用memset为0。如果内...
DASH流媒体MPD中的segmentTemplate SegmentTemplate利用MPD中的属性代入公式计算可以得到相关通配符的数值,来提供给客户端进行相关地址解析。相较于segmentList,使用 SegmentTemplate 的方式,能够很大的减小 MPD 文件大小,不过会额外增加以下客户端解析 MPD 的时间,在直播情况下,MPD中的segment选择segmentTemplate,而不是segmentList。 对于SegmentTemplate,使用了$Number$ 和$Time$通配符进行替换。对于initializati..
makefile判断目录或文件是否为空 ifeq ($(wildcard $(VENDOR_MEDIATEK_TV_DIR)/security/playready*), )若为空则为true。ifeq的用法: ifeq ($(TARGET_ARCH), arm) LOCAL_SRC_FILES := ... else ifeq ($(TARGET_ARCH), x86) LOCAL_SRC_FILES := ... else ifeq ($(TARGET_ARCH), mip...
C++ 单例模式 单例可能是最常用的简单的一种设计模式,实现方法多样,根据不同的需求有不同的写法; 同时单例也有其局限性,因此有很多人是反对使用单例的。本文对C++ 单例的常见写法进行了一个总结, 包括懒汉式、线程安全、单例模板等; 按照从简单到复杂,最终回归简单的的方式循序渐进地介绍,并且对各种实现方法的局限进行了简单的阐述,大量用到了C++ 11的特性如智能指针, magic static,线程锁; 从头到尾理解下来,对于学习和巩固C++语言特性还是很有帮助的。本文的全部代码在 g++ 5.4.0 编译器下编译运行...
C++ 智能指针 unique_ptr 在《拥抱智能指针,告别内存泄露》中说到了内存泄漏问题,也提到了C++中的智能指针基本原理,今天就来说说类模板unique_ptr。在此之前,先回答读者的一个提问:C语言中该怎么办?有几点建议:编写时尽量遵循函数内申请,函数内释放的原则 注意成对编写malloc和free 使用静态扫描工具,如《pclint检查》 使用内存检测工具,如valgrind相关阅读《常见内存问题》。unique_ptr一个unique_ptr独享它指向的对象。也就是说,同时只有一个unique_ptr指向同
sed参数详解 sed -i “s/原字符串/新字符串/g” `grep -rl原字符串所在目录`解释:1. sed -i : 直接替换文件内容。2.sed 's/要被取代的字串/新的字串/g' 这种模式是一种替换模式,但是这样是直接输出,不会修改文件;要修改文件,需要加上-i.3. grep -r 搜索子目录查找, -l 表示输出匹配到的文件名。4. 反引号`` ,是将里面的字符串当做命令执行。例子: 替换h目录所有文件的listen ,替换为:listen_new...
X509证书详解 本文源于两篇英文文档,将其合二为一,翻译过程参考了网上的其它翻译以求更加准确,在此对这些翻译文档的作者表示感谢!文中介绍的OpenSSL版本较老,与现有的版本有很多不符之处,但万变不离其宗,核心原理还是很有参考价值的。1)证书X.509标准是密码学里公钥证书的格式标准。X.509 证书己应用在包括TLS/SSL(WWW万维网安全浏览的基石)在内的众多 Internet协议里,同时它也有很多非在线的应用场景,比如电子签名服务。X.509证书含有公钥和标识(主机名、组织或个人),并由证书颁发机.
pthread线程detached和joinable 线程有两种状态,在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有的线程等待创建的线程结束。只有当pthread_join()函数返回时,创建的线程才算终止,...
libcurl基础知识1 一、LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。想要知道更多关于libcurl的介绍,可以到官网http://curl.haxx.se/上去了解,在这里不再详述。在基于LibCurl的程序里,主要采用callbac.
dlopen failed总结 1、dlopen 动态库失败原因①动态库位置没有放对地方,dlopen路径错误(可以打印dlerror()函数)解决办法:使用正确路径。run time的so路径一般都在环境变量LD_LIBRARY_PATH中,可以获取该环境变量,或者改变export LD_LIBRARY_PATH=`具体路径`②有不能识别的函数或者标识符,undefine symbol解决办法:考虑是不是C++调用C...
AES加密 前段时间,在研究HLS的AES加密,由于一个地方电视台的HLS流有AES加密,在查看了相关的加解密方案后发现使用的是简单的AES的CBC模式,在CBC的模式下,会设置一个IV,初始化向量。但是我在解密的时候,使用了一个由于理解错误而产生的一个错误IV居然也能解密视频并进行播放,于是就有了这篇张文章。AES五种加密模式(CBC、ECB、CTR、OCF、CFB)虽然有五种加密,但是常用的还是C...
Apple官方对于Http Live Streaming的常见问题回答 1、支持哪些类型的编码器? HLS协议本身对编码器的选择没有任何限制。 然而,HLS目前实现的编码格式为H.264 视频和AAC 音频 (HE-AAC 或 AAC-LC)。 Apple官方提供的切片工具支持MPEG-TS Over UDP输入的实时流。 2、具体支持的音视频格式规范包括哪些? 协议本身对编码格式没有限制,就目前的实现来说,支持以下格式: Vide...
HLS--M3U8解析 目录1 简介22 概述23 播放列表文件33.1 介绍33.2新标签43.2.1EXT-X-TARGETDURATION43.2.2EXT-X-MEDIA-SEQUENCE43.2.3EXT-X-KEY43.2.4EXT-X-PROGRAM-DATE-TIME53.2.5EXT-X-ALLOW-CATCH53.2.6EXT-X-ENDLI...
C—动态内存分配之malloc与realloc的区别 在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量。在执行完该函数后,存储参数和本地变量的内存空间就会释放。堆中的内存是由程序员控制的。在分配堆上的内存时,由程序员跟踪所分配的内存何时不再需要,并释放这些空间,以便于以后重用它们。 使用动态内存很明显的好处就是:不需要预先分配存储空间且...
DTS、PTS 的概念 视频视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉。但是在实际应用中,并不是每一帧都是完整的画面,因为如果每一帧画面都是完整的图片,那么一个视频的体积就会很大,这样对于网络传输或者视频数据存储来说成本太高,所以通常会对视频流中的一部分画面进行压缩(编码)处理。由于压缩处理的方式不同,视频中的画面帧就分为了不同的类别...
C++中的生命周期 类A,含构造函数和析构函数普通函数fun,函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObjmain方法新建了类A的局部自动对象MainObj,调用fun方法外面新建了A的的外部静态对象ExStaObj和外部对象GblObj[cpp]view plaincopy#include<iostream>#include<string....