- 博客(206)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注

翻译 boost线程同步
boost线程同步教程l 内锁l 外锁除了C++11标准提供的锁,boost.thread提供了其他额外的锁和工具。内锁:考虑一个银行账户class,该class提供存款和取款从不同的地点。(可以说是多线程编程中的”Hello, World”)该账户的姓名为Joe。 另外有两个线程,一个线程为银行代理,该代理负责将钱存入Joe的账户,也就是说它代表Joe替Joe存钱
2016-01-22 22:03:47
2526
原创 Python 存储模型
1、Python彻底分离了对象和引用,可以认为内存中的对象都是不可修改的,每次修改引用,相当于在堆上重新创建一个对象,引用指向新对象。2、对于数值和字符串,修改意味着引用指向一个新对象。3、集合中的元素都是引用。考虑元组,元组中的引用不能增加删除,也不能修改引用的指向。但是元组本身也是个引用,可以指向另一个元组。4、考虑列表,列表中的引用可以增加删除,也可以修改引用的指向。
2017-04-18 11:52:54
1193
转载 SO_REUSEADDR和SO_REUSEPORT异同
http://blog.chinaunix.net/uid-28587158-id-4006500.html文章内容来源于stackoverflow上的回答,写的很详细http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-
2017-03-14 10:31:48
638
翻译 Linux二进制分析
Preface(序言)软件工程是一种创造发明的行为,该发明在微处理器上存在、生活并且呼吸。我们称它为程序(program)。逆向工程是发觉程序是如何生活和呼吸,以及如何理解、剖析或者修改程序行为,通过结合使用反汇编器和逆向工具并且依赖我们的黑客直觉来掌控我们正在逆向的目标程序。我们必须理解二进制格式、内存布局和给定处理器指令集的复杂性。我们因此成为微处理器上的程序的主人。一个逆向工程师对二进制
2017-03-06 20:35:33
7483
转载 矛与盾:二进制漏洞攻防思想对抗
原文 http://www.freebuf.com/articles/system/127207.html0×0二进制漏洞二进制漏洞是可执行文件(PE、ELF文件等)因编码时考虑不周,造成的软件执行了非预期的功能。二进制漏洞早期主要以栈溢出为主,那时候操作系统和软件厂商还没有相应的安全意识,漏洞利用在当时来说可谓是如入无人之境。要理解栈溢出,首先要掌握C语言中
2017-02-24 15:29:04
2183
1
转载 透彻 Linux (Unix) 五种 IO 模型
IO模型 用一幅图表示所支持的I/O模型纵向维度是“阻塞(Blocking)”、“非阻塞(Non-blocking)”;横向维度是“同步”、“异步”。总结起来是四种模型 同步阻塞、同步非阻塞;异步阻塞、异步非阻塞 。《Unix网络编程》中划分出了“第五种”模型——“信号驱动式IO”其实属于异步阻塞类型,这种模型的通知方式有多种多样后面展开说明。同步/异步、阻
2017-01-17 13:51:58
5822
1
转载 创建单实例守护进程
点击打开链接在UNIX环境高级编程(APUE)中提到了守护进程的创建方法,思路很清晰,所以这里通过代码具体研究下。1 完整程序:单实例守护进程根据APUE的介绍,创建守护进程基本需要如下7个步骤。需要注意的是由于守护进程没有TTY(控制终端),所以代码中部分特意写上去的printf语句是不会输出到终端界面上的。 1 2
2016-12-19 21:50:53
814
原创 C++ linux线程安全单例Singleton
DCL(double checked locking)//class singleton//:s1-singleton* get_instance(void){ lock(); if( instance == 0) { instance = new singleton; } unlock(); return inst
2016-07-03 16:15:42
925
原创 unix进程系统调用的追踪
当你执行未知程序时,就表示你所做的这件事对系统可能造成危险。计算机病毒与蠕虫经常是以此方式散布。如果程序时脚本,你便能进入一窥究竟。但如果它是像黑盒子一般的二进制影像文件,你就无从得知它的行行为了。这类程序通常会让用户觉得不安,我们多半不会以root的身份执行它。这时,有一个能追踪系统调用的日志就很有用了,它可以帮助你找出安装程序究竟做了些什么。就算你太晚知道而不乏恢复已删除的或已
2016-05-25 21:28:55
705
原创 shell终端中断前台进程
有4组键盘符可用以中断前台进程(foreground processes)。这些字符都可通过stty命令选项而设置,通常为Ctrl-C(intr:杀除)、Ctrl-Y(dsusp:暂时搁置,直到输入更新为止)、Ctrl-Z(susp:暂时搁置),与Ctrl-\(quit:以核心转储core dump方式杀除)
2016-05-25 21:07:50
1169
转载 UTC时间、GMT时间、本地时间、Unix时间戳
UTC: Universal Time Coordinated 协调世界时,又称世界标准时间。GMT: Greenwich Mean Time 格林尼治平均时。UTC与GMT:UTC相当于本初子午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示这两者几乎是同一概念。它们都是指的格林尼治标准时间,只不过UTC的称呼更为正式一点。两者的区别在于
2016-01-19 21:33:41
10413
原创 C++临时变量什么时候销毁
https://www.zhihu.com/question/23511471和上面的问题差不多。http://www.cnblogs.com/xkfz007/articles/2506022.html但是还是不算太清楚,所以打算自己测试下,平台x86_64,win7,用网址了的代码在vs上测,没有开优化选项/Odint main(int argc, char **argv
2015-12-20 22:04:07
3921
转载 关于POD
A plain old data structure (POD) is a data structure that is represented only as passive collections of field values, without using encapsulation or other object-oriented features.POD是这样的数据结构:用组
2015-12-15 14:54:58
1343
原创 Argument-Dependent Lookup (aka ADL, or “Koenig Lookup”)
是指在编译器对无限定域的函数调用进行名字查找时,所应用的一种查找规则f(x, y, z); // unqualified无限定域N::f(x, y, z); // qualified限定域NYou don’t have to qualify the namespace for functions if one or more argument types are d
2015-09-20 16:40:08
813
转载 非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用
2015-09-20 14:47:17
1228
转载 C++ trivial和non-trivial构造函数及POD类型
今天看书看到侯捷的《STL源码剖析》里提到trivial和non-trivial及POD类型,查了些资料理解了一下。trivial意思是无意义,这个trivial和non-trivial是对类的四种函数来说的:构造函数(ctor)复制构造函数(copy)赋值函数(assignment)析构函数(dtor)如果至少满足下面3条里的一条:显式(exp
2015-09-20 11:16:58
14693
1
转载 TCP 的那些事儿(下)
作者: 陈皓 来源: 酷壳 发布时间: 2014-05-29 00:17 阅读: 11150 次 推荐: 17 原文链接 [收藏] 这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己
2015-08-28 21:31:10
883
转载 TCP 的那些事儿(上)
http://kb.cnblogs.com/page/209100/作者: 陈皓 来源: 酷壳 发布时间: 2014-05-29 00:16 阅读: 19726 次 推荐: 30 原文链接 [收藏] TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有
2015-08-28 21:30:05
529
原创 C++虚继承的内存模型
#include using namespace std; class ZooAnimal{public: virtual void print() { cout } int a;}; class Bear: public ZooAnimal{public:
2015-08-26 10:43:29
1752
原创 C++函数匹配
候选--->可行--->最佳候选:1、与被调用的函数同名。2、其声明在调用点可见。 可行:1、其形参数量与本次调用提供的实参数量相等。2、每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。 最佳:1、 精确匹配:l 实参类型和形参类型相同l 实参从数组类型或函数类型转换成对应的指针类型l 向实参添加顶层const
2015-08-26 10:32:23
1560
原创 xargs将stdin转换为命令行参数
我们可以用管道将一个命令的stdout(标准输出)重定向到另一个命令的stdin(标准输入)。例如:$cat foo.txt | grep “test” 但是,有些命令只能以命令行参数的形式接受收据,而无法通过stdin接受数据流。在这种情况下,我们没法用管道来提供那些只有通过命令行参数才能提供的数据。 只有另辟蹊径。xargs是一个很有用的命令,它擅长将标准
2015-08-11 16:36:09
1645
原创 仅运行一个程序的单个实例
一些程序,特别是很多的daemon,需要确保同一时刻只有一个程序实例在系统中运行。完成这项任务的一个常见方法是:使用记录锁。 让daemon创建一个文件并在该文件上放置一把写锁。daemon在其执行期间一直持有这个文件锁并在即将终止之前删除这个文件。如果启动了daemon的另一个实例,那么它在获取该文件上的写锁时就会失败,其结果是它会意识到daemon的另一个实例肯定正在运行,然后终
2015-08-11 16:33:46
1251
原创 底层const能区分拷贝,固然也能区分函数重载
void func(int i) {……..}void func(const int i /* 顶层const */) {……..}之所以能根据不同的实参来区分实际该调用哪个函数。(即函数重载)。最主要的根据在传递实参给函数形参的时候,能够有不同的选择,从而区分出不同的调用。 函数swap(int left, int right)
2015-08-11 16:32:22
871
原创 vim区域选择
块选择(Visual Block)Vim的大部分命令都是以行为单位的,有时候想要删除、粘贴或复制特定区域,那么如何搞定一块范围呢?一般模式下,块选择的按键意义v字符选择,将光标经过的字符选择V行选择,将光标经过的行选择[Ctrl]+v矩形选择,可以用矩形的方式选择数据
2015-08-11 16:27:57
18411
原创 Posix线程私有数据
在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问. 我们想想使用什么方法可以做到这一点。1.全局变量为进程中所有线程可见,是否有方法可以缩小其可见度,使其只在某个线程中可见2.函数模块中的自动变量
2015-08-11 16:16:58
606
原创 linux下网络调试工具
linux下网络调试工具,主要包括tcpdump、netstat和lsof工具。1. tcpdump (dump traffic on a network)tcpdump打印指定网络接口中与布尔表达式匹配的报头信息。tcpdump的表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将被捕获。如果没有给出任何条件,则网络上的所
2015-08-11 16:07:30
15085
原创 unix网络编程基础接口
typedef unsigned short int uint16_t;typedef unsigned int uint32_t; typedef unsigned short int sa_family_t;typedef uint16_t in_port_t;typedef uint32_t in_addr_t; 通用套接字地址结构sockaddr,定义在so
2015-08-11 15:49:39
547
原创 IO复用,select、poll、epoll综述
如果不希望进程在对文件描述符执行I/O操作时被阻塞,我们可以创建一个新的进程来执行I/O。此时父进程可以去执行其他的任务,而子进程将阻塞直到I/O操作完成。如果我们需要处理多个文件描述符上的I/O,那么需要为每个文件描述符创建一个子进程。这种方法的问题在于开销昂贵且复杂。创建及维护进程对系统来说都是开销,而且一般来说子进程需要使用IPC机制来通知父进程有关I/O操作的状态。 如果使用
2015-08-11 15:24:47
856
原创 find命令常用
find是UNIX/Linux命令行工具箱中最棒的工具之一。这个命令对编写shell脚本很有帮助。find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。1. 根据文件名或正则表达式匹配搜索选项-name的参数指定了文件名所必须匹配的字符串。我们可以将通配符最为参数使用。*.txt能够匹配所有的.txt结尾的文件名。选项-print在终端中打印符
2015-08-11 15:18:43
4801
原创 C++如何禁止掉对象的复制操作
最容易想到的是将拷贝构造函数与赋值函数声明为private。但是,private只是说外部不能直接调用,但是可以间接通过类的成员函数来调用(通过成员函数与友元函数对其访问)。那么怎么办呢?----》在类中,允许声明函数,但是,可以不用实现该函数,这是合法的。那么即使是在public中声明函数,但是不实现,那么调用这个函数也是会出错的,直接在编译器error。那么好了我们可以特性一起
2015-05-28 11:12:22
6136
1
转载 编程的扇入与扇出
大家都知道模块化编程,也就是重复代码尽量提炼成函数,自己可以用,别人也可以用,但是提炼出什么样的函数才算好呢?这就要用到扇入与扇出的概念。 模块的扇出是指本模块的直属下层模块的个数。如图:模块A的扇出为2,模块B的扇出为3,模块C的扇出为1。一个模块的扇出太大或太小都不好,但是宁可太小也不要太大了。一个函数的扇出太大就意味着它调用了很多其他函数,那么其中任何一个函数修
2015-05-26 15:53:21
13651
转载 C++之RAII惯用法
C++中的RAII全称是“Resource acquisition is initialization”,直译为“资源获取就是初始化”。但是这翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当产生异常、回滚等现象时,RAII可以正确地释放掉资源。举个常见的例子:[cpp] view plaincopy
2015-05-26 15:17:56
699
转载 C ++ 函数后面加throw()的作用
Following declaration gives a message to the user of your class: my method doesn't throw any exception. Don't bother to put a try/catch block around itwhen you use it.void A::foo() throw();
2015-05-26 11:05:10
1200
转载 C ++的new、delete
当写出p = new P();这样的代码的时候, 实际上有两步操作, 首先分配内存,然后在分配好的内存之上初始化类成员.第二步是有构造函数完成的, 第一步就是new函数的工作.全局的new有六种重载形式,void *operator new(std::size_t count) throw(std::bad_alloc); //一般的版
2015-05-26 10:59:07
6334
1
原创 释放typedef的数组,用delete还是delete[]
typedef int scorers[LESSONS_NUM];int *pScorer = new scorers;delete pScorers; //Wrong!!!delete[] pScorers; //Right为了避免这样的错误,建议不要对数组类型typedef,或则采用STL中的vector代替数组。
2015-05-25 16:22:44
610
转载 C++对象模型
何为C++对象模型?C++对象模型可以概括为以下2部分:1. 语言中直接支持面向对象程序设计的部分2. 对于各种支持的底层实现机制语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我简单过一下,重点在底层实现机制。在c语言中,“数据”和“处理数据的操作
2015-05-18 15:53:48
716
转载 C++的Enum hack
从一个例子开始吧class Game {private: static const int GameTurn = 10; int scores[GameTurn];};对于支持类内初始化的C++编译器,这段代码可以编译通过。但是较老的C++编译器,可能不支持类内初始化,这样我们的静态常量,必须要在类外初始化。如下:class Game {private
2015-05-13 10:40:43
1739
转载 UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
By Lee - Last updated: 星期六, 十月 19, 2013Leave a Comment 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Gene
2015-05-11 10:40:09
733
转载 C++中的命名空间
来源:维基百科在C++语言中,命名空间是一种实体,使用namespace来声明,并使用{ }来界定命名空间的作用域。例:namespace foo { int bar;}命名空间对应于命名空间作用域。和C语言的文件作用域兼容,C++具有全局命名空间作用域,对应的命名空间是全局命名空间,不需要声明。用前缀为::的qualified-id显式引用
2015-04-24 10:19:41
948
(仿冒pl-2303_win7_64bit驱动
2013-06-15
c++,加class与不加有什么区别
2015-11-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人