[转载]linux下的c++filt 命令
一个简单的linux命令, 确实不值得大费周折, 但是, 如果能与实际开发工作联系起来, 解决实际开发中的困惑, 在生动的实际场景中学习命令, 那无疑是棒棒哒的感觉.
最近刚好用c++filt解决了相关实际问题, 故而分享如下:
我们知道, 在C++中, 是允许函数重载的, 也就 ...
不怕难之BlockingQueue及其实现
1. 前言BlockingQueue即阻塞队列,它是基于ReentrantLock,依据它的基本原理,我们可以实现Web中的长连接聊天功能,当然其最常用的还是用于实现生产者与消费者模式,大致如下图所示:
在Java中,BlockingQueue是一个接口,它的实现类有ArrayBlockin ...
多线程服务器的常用编程模型
文中的“ 多线程服务器” 是指运行在 Linux 操作系统上的独占式网络应用程序。
不涉及 Windows 系统,不涉及人机交互界面(无论命令行或图形) ;不考虑文件读写(往磁盘写 log 除外) ,不考虑数据库操作,不考虑 Web 应用;只考虑 TCP,不考虑 UDP,也不考虑除了局域网络之外 ...
[转载]设计模式之单例模式(c++版)
动机
保证一个类仅有一个实例,并提供一个该实例的全局访问点。 ——《设计模式》GoF
在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
所以得考虑如何绕过常规的构造器(不允许使用者new出一个对象),提供一种机制来保证一个类只 ...
[转载]c++ 静态链接库和动态链接库
什么是库?
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 w ...
[转载]c++11: std::bind
1. 可调用对象可调用对象有一下几种定义:
是一个函数指针,参考 C++ 函数指针和函数类型;
是一个具有operator()成员函数的类的对象;
可被转换成函数指针的类对象;
一个类成员函数指针;
C++中可调用对象的虽然都有一个比较统一的操作形式,但是定义方法五花八门,这样就导致使用统一 ...
线程安全相关
定义
多个线程同时访问时,其表现出争取的行为。
无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织。
调用端代码无须额外的同步或其他协调动作。
可重入 vs 不可重入可重入函数也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不 ...
[转载]linux之dup和dup2函数解析
1、文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态。一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2),0与进程的标准输入相关联,1与进程的标准输出相 ...
[转载]Linux上C++类的动态加载
1. 前言一种可以让开发者进行更灵活设计的技术。
Linux操作系统下的开发平台提供了很好的环境:自带丰富的测试工具,健壮的操作环境。令Linux引以为豪的是,它能适应各种编程语言。下面的说法,相信并不为过:对Linux开发者来,在所有的编译语言中,选择C作为开发语言是最多的。由此,像C++这样 ...
[转载]Linux动态库生成与使用指南
Linux下动态库文件的文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件。
在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。
程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复 ...