自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 umask的使用

C Linux umask设置掩码

2022-07-10 13:33:56 249 1

原创 关于fd的close on exec

添加链接描述

2021-03-16 16:24:25 146

原创 linux read之后内核做了什么(流程基于linux-kernel-3.12.17)

转载

2021-03-16 16:23:19 115

原创 C++ 快排算法

快速排序, 利用了分治思想, 将问题分成细小部分, 大问题打碎成一个个小问题, 一个一个的突破处理.快排, 现实中有一个常见的场景, 就是一群人从矮到高排列.先拿一个人出来, 这个人作为参照, 比这个人高的全部排在后面, 比这个人矮的全部排在前面.排完后, 以这个人为分界, 前面都是比这个人矮的, 后面的都是比这个人矮的, 所以后面只需要前面部分和后面部分自己再按照上面的方式类推地进行排序就可以了#include <iostream>#include <stdio.h>#

2021-02-22 16:28:20 407

原创 static_cast,dynamic_cast,reinterpret_cast,const_cast相关

static_cast, 如何字面翻译, 静态转换, 这种转换支持基本类型间的转换. 同时会在***编译期***进行类型转换的安全检查.对于像char/int/double…这些类型的转换, static_cast没有问题.对于非基本类型的,像用户自己构造的类, 如果想要通过子类和父类之间转换,Eg: static_cast(subClassObj), 像这种, 编译器在编译期能够检查通过;但是有一点, 当父类型向子类型转换, 编译器会报错, 这种downcast, 因为父类型不一定是子类,(反过来则..

2021-02-22 11:28:20 73

原创 ::operator new 和new

c++中new的过程其实是分成了两个步骤来的.1. 为需要new的对象开辟空间2. 利用新开辟的空间来创建对象其中为对象开辟空间的是operator new(sizeof(T)), T表示对象类型,然后调用T的构造函数T::T(), 此时operator new的空间将用来存放改对象这个可以通过T重载operator new函数(虽然很多书籍是不提倡重载operator new的, 只是当验证用), 然后在调试的时候, 给这个函数打断点, 然后在new的时候也打上断点,就可以看出来.c

2021-02-21 07:42:19 229

原创 Linux tar命令参数

-z 表示gzip的z, 压缩-c 表示create的c, 生成tar的意思, 也就是打包-x 表示release, 打开释放的意思, 也就是解压-v 要显示压缩解压的过程-f 指定打包/压缩/解压的是哪个文件tar -xvf target.tar -C /path/to/target解压target.tar 到 /path/to/target路径下tar -cvf target.tar /path/to/target/打包/path/to/target目录 到 target.tar

2021-02-20 17:09:42 224 1

原创 排序去重算法

void runAlgorithn(int arr[], int n_size) { sort(arr); // 先排序 int i = 0, j = 1; for (; j < n_size; j++) { if (arr[i] != arr[j]) { arr[++i] = arr[j]; } } int idx = 0; for (; idx <= i; idx++) { // i+1是不重复数的总数 printf("arr[%d] = %d\n",

2021-02-19 23:05:16 255

原创 文件锁的问题

Locks are associated with processes.(文件锁跟进程相关联的.) A process can only have one kind of lock set for each byte of a given file. When any file descriptor for that file(同一进程打开同一份文件多次时,进程会得到不同的fd) is closed by the process, all of the locks that process holds on

2021-02-19 09:39:06 221 1

原创 C++11 New Feature(std::enable_shared_from_this)

我们创建了一个类的对象,同时让std::shared_ptr来管理这个对象,如果此时我们需要传递该对象给其他地方使用时,我们也需要使用std::shared_ptr来传递这个对象.这里有一小段代码class c_A {public: ~c_A() { std::cout << "c_A destructor\n"; }};int main_c_A() { c_A* c_a = new c_A(); std::shared_ptr<

2021-01-20 11:47:07 392

原创 小端模式 & 大端模式

小端模式, 变量值的低位存于低地址, 变量值高位存于高地址.大端模式, 则与小端模式相反.inline bool IsLittleendian(){ int i = 0x1; return *(char *)&i == 0x1;}int整型在内存中有4Bytes大小int i = 0x1;在内存中, 如果是大端模式,这内存的存储如下|0x00|0x00|0x00|0x01| ^ ^ low-addr high-addr小端模式,在内存的存储如

2021-01-17 21:25:55 99

原创 #pragma pack(1) 所起的作用

先给个小例子#include <stdio.h>struct A_st { char c; int i;};#pragma pack(1)struct B_st { char c; int i;};#pragma pack()int main() { printf("sizeof(struct A_st) = %d\n", sizeof(struct A_st)); printf("sizeof(struct B_st) = %d\n", sizeof(s

2021-01-17 21:06:29 563

原创 poll函数

select相关 select相关poll其实大体跟select差不多,但是poll没有最大连接数的限制,因为是用链表实现的.poll有给水平触发的特点,如果有读写事件进来了,也给用户返回了,但是用户没有处理该fd,下次轮询,poll还是会继续上报该fd...

2021-01-17 09:56:41 124

原创 select函数相关

select调用用户空间的timeout会被拷贝到内核的end_time(设定时间)内核空间会分配6个fdset,分别为in,out,exception(给用户输入用的),还有res_in, res_out, res_exception(3个相应的输出给用户的)用户fd_set会被拷贝到内核in, out, exception遍历所有fd, 调用sock_poll遍历完后, 可能会返回一个mask掩码(如果有读写事件发生的话), 这mask是用来设置fd_set的也有可能没有,要是没有超过ti

2021-01-17 09:36:46 139

原创 SDP协议字段分析

参照RFC-4566, 对一些常见的sdp字段进行分析.截取了rtsp点播交互的sdp数据作为分析例子.sdp的版本号,0号版本没有0.x之类的小号版本v=0源(origin) <用户名> <会话ID> <会话版本> <网络类型> <地址类型> <单播地址>这个地方没有用户名, 会话ID和会话版本可能使用的是时间戳IN->Internet, IP4除外还有IP6地址是会话创建者的ip或者域名,非私有地址(也可能有意外

2021-01-13 16:52:02 470

原创 ffmpeg滤镜:简单去掉电视台的logo

这里用到的是delogo这个功能,它通过指定电视台logo的区域,然后指定区域利用周围相邻像素来进行插值混合运算,得到指定区域去掉logo后的像素值,从而实现滤镜效果.其具备的参数值有:1. x,y 指定区域的起始坐标2. w,h 指定区域的宽高3. band,t 这个已经废弃,就不做介绍了4. show 这个置为1,滤镜后会呈现滤镜的具体区域,让人容易定位.具体指令:./ffmpeg -i yourinput.$(filesuffix) -vf "delogo=x=$(logo_x).

2021-01-11 10:11:16 526

原创 How to use ssl/tls to secure your communication

Access the linkhttps://www.vircom.com/blog/how-to-use-ssltls-to-secure-your-communications-the-basics/

2021-01-08 10:53:47 114

原创 视频质量的标准之信噪比

视频质量的标准之信噪比 对于视频质量评价,有两个标准,一个是压缩比,一个是信噪比(SNR). 至于峰值信噪比有个公式 **PSNR = 10lg((L^2)/MSE)** **MSE = SSD/(M*N)** 其中,SSD是压缩前后两张图像像素值平方差和, M和N分别代表图像的宽高像素个数也就是说MSE是压缩图像前后像素值的均方差.L是像素值的最大取值,一般是255.当PSNR的值越大,则MSE越小,证明压缩后的图像越接近原始图像,视频质量越好.

2021-01-02 01:42:58 1691

原创 算法笔记——数组中重复的数字

条件:长度为n的数组Array,Array[i]的范围为0~n-1,数组内可能存在重复的数,也可能没有重复的数要求:找出给定数组中重复的数由于数组中的Array[i]处于0~n-1的范围内,也就是说,当这个数组中的n个数不重复时,对该数组重新排序,会出现第i个位置的数大小应该是Array[i]。由于数组中存在重复的数,也就是排序后,某个位置上的数会出现多个,而某个位置上则没有数。我们可以从头开始扫描数组的每个数Array[i],当i位置上的数Array[i]等于i,说明该位置的数没有乱序,我们继续

2020-08-02 23:25:04 143

原创 c++虚函数和虚继承

c++中,多态的实现需要虚函数,而虚函数主要包括两部分,虚函数指针和虚函数表。基类将自己的一些函数设为虚函数,子类则需要在继承基类后,重写或者直接使用从基类的继承下来的虚函数。基类自己会保存一份虚函数表,这个虚函数表含有指向基类虚函数的虚函数指针。当子类继承基类后,同样会将基类的虚函数表继承下来,这样子类便拥有了属于自己的一份虚函数表,如果子类重写了基类的虚函数,那虚函数表的对应的虚函数指针将会修改,指向新的重写虚函数。c++的虚继承,当子类虚继承基类,子类会有一份虚基类表,这个虚基类表存储的..

2020-08-02 12:21:56 378

原创 c++析构函数之所以要变成虚函数的理由

先贴出一个小例子#include <stdio.h>#include <string>class Packet {public: Packet() {printf("Packet construtor\n");} virtual ~Packet() {printf("Packet destrutor\n");}};class Wrapper : public Packet {public: Wrapper() {printf("Wrapper constru

2020-08-01 23:10:49 77

原创 Java类成员默认访问权限(包访问权限)

Java中,当一个类的某个成员变量前面不带任何权限修饰(private,protected,public),这种成员变量在Java中,会默认一种访问权限,包内部访问权限。即包内其他类可以访问该类,但是该类在包外部的其他类不能访问。上一个简单的实例package com.ggboy.partone;public class PrivilegeDemo { String mOne = ...

2020-02-21 19:37:25 12032

原创 Android中,View在layout文件的onClick属性值,是如何找到对应的onClick方法过程(个人理解)

Activity类通过布局id找到布局文件后,对各个组件进行布局,其中就包括View的创建。View的创建会通过方法 public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes)传递的参数:1. 其中后面两个参数,在View类的内部都是传了0;2. attrs则是V...

2020-02-21 11:31:55 404

原创 缓冲buffer和缓存cache的区别(个人理解)

缓冲区是写数据时用的,比如下载文件的过程中,程序不可能是下一点就写一点,而是通过存进buffer里面到一定量后才进行写操作的;缓存区是读数据用的,将磁盘中的数据读入到cache中,这样就加快了访问的速度,这个是读操作。...

2020-02-15 17:42:13 465

原创 ffmpeg获取时间方法(libavutil/time.c)

FFmpeg libavutil/time.cint64_t av_gettime_relative(void){#if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC)/* 如果有clock_gettime函数 和定义了CLOCK_MONOTONIC(从系统重启到现在所经过的时间) 就通过clock_gettime该函数...

2020-02-08 16:08:00 2598

原创 Java interface 的成员 为什么只能是public final static

interface不可实例化,如果是非static(静态)的成员,那必须是实例化才能使用该成员,这跟interface不可实例化相矛盾,因此interface的成员必须是static的;interface的成员要想让implement它的类能够使用该成员,那该成员的属性需要是public的;通过1的条件可以知道,interface的成员属性是static类型的,也就在该interface中只...

2020-02-08 10:06:48 707

原创 简单链表实现-C++笔记

定义Node节点,使用泛型template <class T>struct LinkedNode { LinkedNode() :value(0), next(NULL) {} LinkedNode(T v, LinkedNode* node) : value(v), next(node) {} ~LinkedNode() {} T value; LinkedNode* ...

2020-02-07 15:12:58 92

原创 选择排序算法-笔记

input: int[] a/*选择排序法*/if(a==null || a.length() < 2){return;}int len = a.length();int j = 0;for(int i = 1; i < len; i++){ int tmp = a[i]; j = i-1; while(j>=0 && tmp<a[j...

2020-02-04 18:45:34 51

原创 数据结构笔记

数据结构简单的顺序栈实现. c++实现的部分#define LONGTH 22template <class T>class Stack {public: Stack(int size = LONGTH); ~Stack(); bool isEmpty() { return mTop == 0; } bool clear() { mTop = 0;...

2020-02-03 17:18:58 76

空空如也

空空如也

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

TA关注的人

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