自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

waponx的专栏

操千曲尔后晓声,观千剑尔后识器。

  • 博客(132)
  • 资源 (2)
  • 收藏
  • 关注

原创 glibc中的文件指针漏洞分析

glib版本2.17在上一篇文章(源码解析glibc中的pclose与fclose函数)中,初步了解到了glibc中的文件指针。现在我们再来深入分析一下glibc文件指针,并解析一下其漏洞所在。注意:这个漏洞在glibc2.24中通过加入虚表地址检查修复glibc中的文件结构先了解一下普通文件的方式(注意3个标准文件描述符的链接顺序)!文件链接示意图](https://img-bl...

2019-01-31 20:39:21 7949 1

原创 源码解析glibc中的pclose与fclose函数

文章目录pclose 和 fclose 的阻塞问题测试代码问题pclose与fclose的关系fclose函数的定义pclose函数的定义总结fclose中的block有嫌疑的地方初识文件指针popen与fopen的魔术fopen的实现popen的实现总结glibc源码版本:2.17pclose 和 fclose 的阻塞问题测试代码int main(){ for(unsign...

2019-01-22 23:10:05 2506

原创 linux下基于smtp协议的C++客户端debug经验

1.解决mail.log出现的warning: SASL authentication failure: cannot connect to saslauthd原因:postfix没有找到saslauthd的工作目录,由于postfix的工作目录默认在/var/spool/postfix/var/run/saslauthd中;而sa

2015-10-14 22:00:57 1326

原创 浅谈网络编程的入门

写下自己的经验希望能给想学习网络编程的又不知道从何入手的人一点参考。前言:这篇博文是我自己在学习linux下C++网络编程之后写下的,主要是说了自己对linux下C++网络编程的一些理解。第一:学习C++网络编程需要看什么书:    1.你需要一本C++的入门书籍,什么入门书籍好呢?很多,自己百度搜一下找些PDF看看看也行。在熟悉了C++的语法和一些简单的用法,

2015-09-30 17:30:23 1101

原创 linux下使用GDB调试C/C++总结(图文教程)

一般来说,GDB主要帮助你完成下面三个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。gdb调试命令表:命令解释简写file加载一个可执行文件,也可以在运行gdb的时

2015-08-05 10:42:04 2529

原创 直播入门(四)通过代码实现一个简单的推流器

文章目录原理原理从前面的文章,我们可以知道,实现推流客户端需要执行的下面几个步骤:采集编码封装推流本文实现的是将本地的文件推送到服务器的过程,因此,不存在采集和编码过程。只有封装和推流的过程。...

2019-04-20 14:44:24 6471 2

原创 直播入门(附录二)FFmpeg关键函数一览表

文章目录av_register_allav_register_all

2019-04-20 09:52:41 535 1

原创 直播入门(附录一)FFmpeg关键类一览表

文章目录关键类AVFormatContextAVInputFormatAVOutputFormat关键类AVFormatContext定义这里只给出源码的路径libavformat/avformat.h简介FFmpeg将各种封装格式通过在这个结构体进行抽象。这个结构体在解封装中扮演者穿针引线的作用,通过这个结构体,可以将编码后的数据分装成FLV,MP4,AVI等格式。创建这个结构体不...

2019-04-18 11:07:39 603

原创 直播入门(三)动手实现一个简单的直播

文章目录环境搭建nginx安装与部署安装配置ffmpeg安装环境搭建搭建一个直播流程需要一下几个组件:nginx:作为直播的服务器,接收推流过来的数据,以及负责分发数据流。ffmepg:推流客户端VLC media player:播放器,用来做为直播的客户端。nginx安装与部署安装先到nginx官网上下载nginx源码和RTMP模块源码。依次执行下面的命令:cd 到ngin...

2019-04-14 13:59:58 3514

原创 直播入门(二)从视频采集到客户端播放

概述一个主播开播到用户能观看,一共经历了以下几个过程:采集:通过摄像头,麦克风等采集图像和音频数据编码:将采集到音频和图像数据,编码压缩,降低数据大小,并尽可能的保留精度。封装:将编码后的数据,封装成各个格式,大家比较熟悉的如:FLV,MP4推流:将完成封装的数据,采用HTTP或者RTMP协议推送到服务端分发:直播流服务将数据分发给各个客户端,也就是每个用户的浏览器或App上。播放...

2019-04-11 15:47:30 2297

原创 直播入门(一)直播的出现与发展

文章目录国内直播历史回顾兴起的条件国内直播历史回顾参考资料:直播兴起的历史2018年我国直播行业相关监管政策汇总    早在2003年,电视上就已出现了游戏的直播,当时比较火的游戏是星际争霸和CS。    2004年,广电总局发布《 关于禁止播出电脑网络游戏类节目的通知》    2006年,魔兽世界的的兴起以及其20~40的多人组队模式,催生了YY语音等平台。随后YY语音又顺势...

2019-04-10 14:45:24 2428 1

转载 windows系统禁止屏幕旋转快捷键

转载自:https://blog.csdn.net/yongshi6/article/details/72598246因为用IDEA开发,熟悉了很多快捷键,用起来非常舒服。回退到上个代码处的快捷键是Ctrl+Alt+左方向键,但最近显卡动了以后,系统占用了这个快捷键,只要使用,就是屏幕旋转。靠,痛苦啊。忍了两天后,决定找方法。这里劝大家解决问题的时候用谷歌(需翻墙),百度真的不行,搜不出什么好答案...

2018-04-14 23:06:41 1341 1

原创 解决python相对导入出现错误:Attempted relative import beyond toplevel package

相对导入的官方解释(中文):http://python3-cookbook.readthedocs.io/zh_CN/latest/c10/p03_import_submodules_by_relative_names.html相对导入解决的问题就是消除绝对路径带来的硬编码问题,具体请看文档。但是在使用相对导入的时候会出来各种错误,其中最让人费解的可能就是:Attempted relative import beyond toplevel package

2017-12-21 13:58:56 88159 7

原创 Bash Shell 的 嵌套的While带来的问题

今天遇到了一个问题,当使用了嵌套的while之后,发现变量的值不会变更,例如下列代码while 1; do a = 1 cat file | while line || [ -n "${line}" ]; do a = 3 done echo "${a}"done这段代码输出的a一直都是2,而不是3。就是说内层的while中对a的修改并没有作用

2017-08-25 13:17:37 3283

原创 Lua table转string函数

由于lua不能直接打印table类型,在调试信息或者输出到文件的时候会很麻烦。在打印table的时候,有几个必须要考虑额问题:1.  格式化2. 防止重复打印table,难点在于怎么判断一个table是否已经被打印过了。关于第一个问题:其实就是如何缩进的问题,每打印一个table就缩进一层。关于第二个问题:使用一个table记录已经打印过的table,如果某一个tabl

2017-08-09 16:57:44 2009

原创 Lua UTF-8 全角转半角

根据UTF-8的编码规则,可以知道:1. 全角空格为12288,半角空格为32 2. 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 但是UTF-8不能字节转换位整型变量,因此需要一个函数,做一个转换:function utf8_to_num(raw_string) local result = {} pos = 1

2017-07-29 20:36:12 2836

原创 Lua 删除UTf-8编码中的特殊字符

首先,我们要对UTF-8有一个基本的认识,根据Wiki上面的解释:UTF-8使用一至六个字节为每个字符编码(尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多四个字节):1. 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。2. 带有附加符号的

2017-07-29 16:28:02 3197

原创 Python 安装pybloomfilter 问题解决

报错信息:Requirement already satisfied: pyopenssl in /usr/lib/python2.7/dist-packages/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An

2016-12-10 17:33:25 4413

原创 使用gawk记录一段时间内,某个进程占用内存和CPU的情况

很多时候,我们在后台测试程序的时候,都需要隔一段时间监控程序的内存和CPU占用情况,但是又不能经常盯着top命令的输出。 这时候就需要使用脚本来帮我们记录这些信息,方便我们监控了。废话不多说,直接上代码:#!/bin/bashFileName="res.txt"echo "%CPU\t%MEM" > $FileNamefor (( i = 0; i < 10; i++ )) do ou

2016-09-27 16:13:28 7442

原创 自动配置vim

在我的github上有一个基本的Vim的配置文件:https://github.com/WaPonX/MyVim 想要学习vim和使用vim的同学可以上去下载。 安装也是很简单的: 首先需要获取一份克隆,如果安装了git的可以用下面命令:git clone https://github.com/WaPonX/MyVim.git然后,执行命令:./install/sh就可以了。因为我用YCM

2016-09-23 12:10:35 551

转载 redis+Keepalived实现Redis高可用性

转载自:[id]:http://heylinux.com/archives/1942.html“title” 目前,Redis还没有一个类似于MySQL Proxy或Oracle RAC的官方HA方案。 Redis作者有一个名为Redis Sentinel的计划(http://redis.io/topics/sentinel),据称将会有监控,报警和自动故障转移三大功能,非常不错。但可惜的是短期

2016-09-23 11:37:36 470

原创 CentOS7 安装 MySQL5.7 全步骤

1. 下载rpm:wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm2. 更新源:sudo rpm -Uvh mysql57-community-release-el7-8.noarch.rpm3. 检查是否可用:yum repolist enabled | grep "m

2016-08-23 14:32:47 1388

转载 python多进程

由于GIL的原因,Python不支持真正意义上的多线程于是转而求其次,Python使用多进程来完成并行任务。Python的multiprocessing库就是多进程的利器,它能够像多现成一样的使用多进程,注意 python version 2.6+能够简单快捷的进行多任务开发。多进程间共享数据,可以使用 multiprocessing.Value 和 multiprocessing.Ar

2016-08-17 14:58:22 404

转载 Python 读取写入配置文件 —— ConfigParser

转载自:http://www.cnblogs.com/feeland/p/4514771.html  Python 读取写入配置文件很方便,可使用内置的 configparser 模块;可查看源码,如博主本机地址: “C:/python27/lib/configparser.py”Configuration file parser. A setup file consi

2016-07-26 10:12:18 2382

转载 Python的静态成员变量和非静态成员变量

Python中,静态成员变量称为类变量,非静态成员变量称为实例变量。基本概念类变量:类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。类变量在整个实例化的对象中是公用的。实例变量:定义在方法中的变量,用 self 绑定到实例上,只作用于当前实例的类。访问方式类变量:在类内部和外部,类变量都用 ` 类名.类变量 的形式访问。在类内部,也可以

2016-07-23 22:15:45 4938 1

转载 python 在不同层级目录import 模块的方法

http://www.cnitblog.com/seeyeah/archive/2009/03/15/55440.htmlpython包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍几种常用情况:(1)主程序与模块程序在同一目录下:如下面程序结构:`-- src    |-- mod1.py    `-- t

2016-07-16 20:33:09 516

原创 MySQL5.7 触发器

很多时候,我们都需要在插入和删除等动作之前或之后执行数据的检查。比如:在插入学生成绩的时候,检查成绩是否在0~100这个区间。如果是就插入,不是就放弃这个操作。为了达到这个目的,我们需要建立一个触发器。在介绍触发器的语法之前,先 介绍MySQL中的delimiter关键字。1. delimiter关键字:当你参考别人的触发器时,你会发现很多人会在触发器的创建语句之前加上一句:

2016-07-16 19:55:05 2699

转载 并发导论

转载自并发编程网 – ifeve.com本文链接地址: 并发导论写在前面的话 由于之前工作中的疏忽,在使用Java多线程并发的时候出了问题,遂决心全面学习并发相关知识。写作本文的意图只是希望在写作过程中把想不清楚或是一时无法掌握的地方反复揣摩记录下来。写作本文参考的各种资料较多,抱歉的是文末的参考文献中对一些叫不上名字或没有出处的资料文献并未列举出来。由于本人是初入职场的菜鸟,更是

2016-05-09 22:04:11 710

原创 MySQL的JDBC判断查询结果是否为空以及获取查询结果行数的方法

判断查询结果是否为空在JDBC中没有方法hasNext去判断是否有下一条数据,但是我们可以使用next方法来代替。看next方法的官方解释:    boolean next() throws Moves the cursor forward one row from its current position. A ResultSet cursor is in

2016-05-09 17:31:05 17668 2

原创 简易聊天程序教程(六)主窗口和聊天窗口

主窗口用的是JList控件,在显示了登陆的跟人信息之后,接下来就是好友的列表。为了方便以后拓展 ,我把好友的信息封装在FriendInformation中,FriendInformation类的定义也很简单的,都能看懂。下面来逐步分析一下MainWin类:MainWin中比较重要的是事件的监听:好友列表中的右键菜单的监听: JMenuItem item = new JMe

2016-05-09 17:08:42 2542

原创 简易聊天程序教程(五)客户端的登陆和注册窗口

其实大家也能想到,登陆和注册窗口其实很相似的,而注册窗口总是比登陆窗口多一些内容。先来说说登陆窗口。登陆窗口的界面如下图:登陆窗口继承字Dialog类,而不是继承自JFrame类。登陆窗口显示在屏幕中间,通过下面的方法就可以达到效果:setLocationRelativeTo(null);在构造函数中调用这个方法,就能显示在屏幕中央,如果参数不是null,则显示的位置与

2016-05-09 16:01:37 2249

原创 简易聊天程序教程(四)客户端基本功能

客户端的基本功能是根据服务器给出的接口逐步来实现的。客户端的设计流程是清晰的。简化的思考流程如下图所示:当然,实现的时候就要考虑比较多的细节,比如在注册的时候,注册失败怎么办,登陆的时候,账号密码不匹配怎么办。但总的流程就是这样子的。从上面的流程可以看出了,客户端的窗口模块分下面几个(附上动作的解析):1 登陆窗口模块:       登陆窗口需要提供两个输入框,输入

2016-05-09 15:33:49 2821

原创 简易聊天程序教程(三)服务器的多线程

如果一个服务器只能为两个用户提供服务器,那就真的是太渣了。很多时候,聊天的客户都会大于两个。因此需要提高并发量。在Java中使用多线程还是很方便的。我在这个服务器程序使用的是实现Runnable接口的方法来定义自己的多线程操作。通过重写run方法,来实现自己的多线程操作。每个线程都会有一个client成员变量,这个成员变量用来记录客户端的Socket。然后,每个线程都会使用

2016-05-09 15:08:12 973

原创 简易聊天程序教程(二)服务器的基本功能

我设计的时候是先从服务器端开始设计的,服务器端先给出接口,然后客户端针对接口编程。在说服务器的代码之前先说说数据库的设计吧。数据的设计是简单的,只有两个表:create database SimpleChat;CREATE TABLE IF NOT EXISTS Account ( username varchar(50) NOT NULL, userpass

2016-05-09 11:32:12 1122

原创 简易聊天程序教程(一)自定义异常和消息格式

自定义异常的目的是为了更好的表示出错的原因,能够针对不同的异常执行不同的处理。异常的自定义是简单的,只是简单的继承了Exception类。下面给出所有聊天程序的异常类的基类的ChatException的定义:package SimpleChat;public class ChatException extends Exception{ /** * */ priv

2016-05-09 11:03:20 1426 4

原创 简易聊天程序教程(零)简介

从本文可以学到什么?本文不会教你Java的语法,不会详细的解释所有的控件,不会教你多线程的知识。从本文中,可以获取的是一个简易的聊天程序的设计过程,在这个过程中,你可以获得是,代码的经验,使用Java的编程的一个例子。还有的就是一个简易聊天服务器的设计过程。还有,可以用这个程序来做课设:)这系列文章应该如何阅读?如果想要弄懂,建议下载源代码和本系列文章一起看。这个程序的

2016-05-08 22:50:42 783

原创 快速排序

快速排序是已知的在实践中最快的排序算法。它的最坏时间复杂度是O(n^2),平均时间复杂度是O(nlogn)。快速排序的算法主要的思想在于分部算法(partition),下面的步骤是基于升序排序的假设:    1.选取合适的枢纽。    2.遍历整个数组,将数组中小于或者等于枢纽的元素放在左边,大于或者等于枢纽的元素放在右边。快排的最坏情况出现在输入的数据是有序的,且

2016-04-21 22:25:50 717

原创 堆排序

堆排序的最坏时间复杂度是O(nlogn),平均时间复杂度是O(nlogn)。但是堆排序的时间常数比较大,因此从平均来看堆排序的时间复杂度反而是最差的。基本接口:1.插入:插入一个新元素的时候,首先将这个新元素放在最后,因为新元素的插入操作可能会破坏堆的性质,因此执行上游操作。2.删除:删除一个新元素的时候,首先要将堆顶元素和最后一个元素交换。然后将堆的大小减一。删除

2016-04-21 17:31:32 1116

原创 C++ Q&A(六)构造函数的常见问题

声明:Q&A系列的文章是我在平时自己遇到的或者看到的一些问题,本着再小的问题也需要有人解答的想法,将这些问题和答案整理出来。欢迎和我讨论问题,同时也欢迎转载Q&A系列的文章。前两篇文章说了new运算符的有些相关知识,现在我们再来探讨一下有关C++的构造函数的问题。下面的问题都是在面试中很 经常被问到的。1.构造函数可以是虚吗?我在面CVTE的

2016-04-14 15:06:08 770

原创 C++ Q&A(五) 再论new操作符

声明:Q&A系列的文章是我在平时自己遇到的或者看到的一些问题,本着再小的问题也需要有人解答的想法,将这些问题和答案整理出来。欢迎和我讨论问题,同时也欢迎转载Q&A系列的文章。new operator: 指的是一般情况下我们使用的new运算符,C++primer中叫做new experssionoperator new:operator new 是一个函数。用来分配空间,和C标准

2016-04-14 14:32:52 463

简易聊天程序

简易的聊天程序示例,包含了Client和Server的源代码。

2016-05-09

B树的基本操作(VS2012项目文档)

B树的基本操作(插入,分裂,删除),VS2012项目文档

2015-08-24

空空如也

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

TA关注的人

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