自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 守护进程

守护进程是一种后台进程,类似Windows服务,它脱离终端运行,不能直接和用户交互,不受登陆注销影响,周期性执行任务,一般网络服务都以守护进程的形式运行。守护进程程序的名称通常以字母“d”结尾,例如syslogd就是指管理系统日志的守护进程。查看守护进程的方法: ps -ajx,进程中带-1的是守护进程 ps -eo pid,sid,tty,cmd,进程中tty对应?且pid和sid不同...

2018-08-30 19:50:33 530

原创 互斥锁,读写锁,条件变量,自旋锁

互斥锁在多线程的情况下,当一个变量可以被多个线程修改时,就需要考虑多线程同步问题。线程A修改变量前,先加锁,修改结束再解锁,然后线程B获取同样的锁,修改结束再解锁,如果不是同一把锁,同步是无效的。在C++中使用pthread的互斥量接口实现数据同步,线程A对互斥量mutex加锁后,其他尝试加锁的线程都会阻塞,等线程A解锁后,其他线程从阻塞变为运行态,第一个抢到CPU的线程加锁成功,其他线程...

2018-08-30 19:50:16 1357 1

原创 Linux进程分析(三) fork循环创建Linux子进程

forkfork的意思是复制进程,就是把当前的程序再加载一次,加载后,所有的状态和当前进程是一样的(包括变量)。fork不象线程需提供一个函数做为入口, fork后,新进程的入口就在 fork的下一条语句。 返回值为pid_t,实际是unsigned int:子进程中为0,父进程中为子进程ID,出错则为-1。开始写了几个都不成功,最后终于成功了:pid_t p = getpid(...

2018-08-30 19:49:54 2307 1

原创 Linux进程分析(二) 父子进程与进程组

ps命令一般用来显示终端信息和进程信息,运行命令ps -eo pid,comm,cmd可以输出所有进程的信息,e代表所有进程,后面三个参数是需要输出的信息。第一列PID是一个整数,每一个进程都有一个唯一的PID来代表自己的身份,进程也可以根据PID来识别其他的进程。第二列COMMAND是这个进程的简称。第三列CMD是进程所对应的程序以及运行时所带的参数。 PID为1的进程是systemd...

2018-08-30 19:49:36 3942

原创 Linux进程分析(一) 虚拟内存和物理内存

物理内存面临的问题问题 1我们现在常用的电脑有32位和64位,这里以32位为例。32位的系统可用的地址空间有就是2的32次方,即4G,现在的电脑物理内存大多都在4G以上,可以前的电脑内存都达不到4G,我们的程序希望能用4个G,这也就是内存面临的第一个问题:物理内存小于系统位数的要求大小该怎么处理? 问题2程序直接使用物理内存,会出现没有连续可用空间的情况,也是不能最大利用...

2018-08-30 19:49:17 4085

原创 基于信号量的生产者-消费者

信号量是进化版的互斥锁,互斥锁只能供一个线程使用,信号量可以供多个线程使用。如果希望在多个线程之间对某对象的部分数据共享,互斥锁无法实现,只能将整个数据锁住,这样导致线程并发性下降。 信号量既能保持同步,数据又不混乱,又能提高线程并发。主要函数:int sem_int(sem_t* sem, int pshared, unsigned int value); //初始化信号量i...

2018-08-30 19:46:47 327

原创 char数组和指针问题

这个问题是C++基础问题中相当折腾人的一个,死记硬背解决不了根本问题,记住还是要忘,需要仔细研究其本质。这两种方式就是数组和指针的方式:char a[6] = "abcde";char *b = "abcde";第一行声明了并初始化了一个char数组,第二行是声明char指针b,指向了常量字符串。其中a是数组的首地址,a和b的地址一定不同。千万不能说数组名是指针,可以用siz...

2018-08-30 19:45:33 2393

原创 fprintf,snprintf和sprintf函数

fprintf原型:extern int fprintf (FILE *f,const char *s, ...); 可以将字符串输出到某文件中,但更常用的用法是:fprintf(stdout,"Hello\n"); //加换行fprintf(stderr,"World!");输出Hello换行World。stdout是行缓冲的,输出会放在一个buffer里面,只有到换行的...

2018-08-29 16:59:57 447

原创 静态变量和静态函数

对于类的静态成员变量,只有static const int类型和 enum 类型能在类里面初始化,其他只能在.cpp里初始化,但不能在类体内初始化,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。静态成员函数和静态变量在类体外初始化时,无须加static关键字,否则是错误的。静态变量不参与sizeof计算静态成员仍然遵循public,privat...

2018-08-29 16:59:32 615

原创 常用shell命令

查找字符串grep -r "struct event_base {" -n 在当前目录查找字符串,找到后返回文件和对应的行 统计文件行数、字节、字数wc命令,选项-l, -c, -w分别统计行数、字节、字数,可统计多文件,但不能统计目录。wc -c main.cppwc -l *.cppwc -l main.cpp test.cpp t.cpp //统计三个文件...

2018-08-29 16:58:35 195

原创 安装配置qt_eventdispatcher_libevent

QT默认的是使用select模型的,这种轮询方式非常慢。在高并发连接,我们需要epoll才能发挥linux服务器的性能. 安装qt_eventdispatcher_libevent下载安装包后,解压,找到src目录,用Qt打开pro工程,然后qmake, build。编译完成后,在lib文件夹里增加三个文件:pkgconfig目录,libeventdispatcher_libevent....

2018-08-29 16:57:40 909

原创 window下apache安装和配置

下载32位: http://httpd.apache.org/ 64位: http://www.apachelounge.com/download/安装解压Apache2.4到F:\Apache2.4 修改文件F:\Apache2.4\conf\httpd.conf:服务根目录:ServerRoot的参数改为F:\Apache2.4服务端口号:Listen 80 修改...

2018-08-29 16:57:05 2110

原创 libevent安装配置

Libevent的特点: 1. 基于事件驱动 2. 轻量级,源码精炼,不像ACE那样庞大臃肿 3. 跨平台 4. 支持多路I/O从网上下载安装包后放到目录解压,到libevent-2.1.8-stable目录下依次执行:./configuremakesudo make install编译完成的库文件在libevent-2.1.8-stable/.libs中,有libev...

2018-08-29 16:55:08 758

原创 退出与报错函数

exit函数exit中的参数exit_code为0代表进程正常终止,若为其他值表示程序执行过程中有错误发生。出错时退出一般用exit(EXIT_FAILURE);errnoerrno表示错误代码。 记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。系统每一次出错都会对应一个出错代码,例如12表示“Cannot allocate memory”。st...

2018-08-29 16:54:02 1083

原创 memset和memcpy函数

memset函数原型:void *memset(void *s, int ch, size_t n); 作用:将s所指向的内存中的前n个字节的内容全部设置为ch指定的ASCII值,这个函数通常为新申请的内存做初始化工作。一般用于结构体和数组的初始化。memset中的第三个参数一定要使用sizeof操作符,因为每个系统下对类型长度的定义可能不一样。memset中的第一个参数一定要是一个...

2018-08-29 16:53:11 512

原创 strcat strcpy strlen strcmp

strcat我自己写的是这样:char* _strcat(char *_Dest, const char *_Source){ assert((_Dest != NULL) && (_Source != NULL)); char* p= _Dest; while(*p!='\0') { p++; } co...

2018-08-29 16:52:51 313

原创 不要显式调用构造函数和析构函数

常用的代码如下:Base b;cout<<"hello"<<endl;结果:基类构造 0x62fe84hello基类析构0x62fe84但是这样的代码就不同了:Base(); //匿名的临时对象cout<<"hello"<<endl;运行结果:基类构造 0x62fe84基类析构0x62fe...

2018-08-29 16:52:01 640

转载 select poll epoll

Selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,select在socket编程中还是比较重要的。一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程...

2018-08-15 19:51:52 233

原创 函数在main之前或之后运行

C++中,全局对象的构造函数在main之前运行,析构函数在main之后运行。类静态变量的初始化在main之前,静态函数不行。class Base{public: Base() { std::cout<<"基类构造"<<endl; } ~Base() { std::cout<&lt...

2018-08-09 22:43:01 486

原创 结构体与类的字节对齐(终极方案,简单易懂)

字节对齐终于搞清楚结构体的字节对齐怎么计算了,看了那么多博客,好多都不靠谱,最后看了一个老外的讲解,没用3分钟就明白了。主要是两条规则: 1. 某个类型变量是否需要补位,取决于之前所有变量所占内存字节数是否是它的整数倍,若是则不必补位,不是则补齐。 2. 结构体总大小必须是最大成员变量大小的整数倍直接看几个例子: 1. typedef struct bb{ int id;...

2018-08-06 23:12:58 2047 4

原创 单例模式

应用实例: 1、日志类,一个应用往往只对应一个日志实例。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。3.windows系统的任务管理器就是一个例子,总是只有一个管理器的实例。优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。 2、避免对资源的多重占用...

2018-08-05 16:13:43 405

原创 详解拷贝构造函数

基本规则拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。所以类中可以存在多个拷贝构造函数。编译器会自动生成默认构造函数,这个构造函数很简单,仅仅使用“老对象”的数据成员的值对“新对象”的数据成员逐个进行赋值,也就是浅拷贝。默认拷贝构造函数不处理静态变量。如果静态成员变量在构造、析构实例的时候需要修改,那么通常需要手工实现拷贝构造函数和...

2018-08-04 14:19:41 1095

原创 构造函数的成员初始化列表问题

必须在派生类构造函数中初始化的几种情况派生类构造函数对基类初始化基类没有显式声明构造函数或者有一个无参数的构造函数,派生类构造函数可以不用对基类初始化,即忽略基类的构造函数,基类的构造函数全是有参数的,派生类必须至少实现一个基类的构造函数,例如Qt中常见的:explicit MainWindow(QWidget* parent=0);//QMainWindow构造函数都...

2018-08-04 10:12:15 1601

原创 构造函数与析构函数

构造函数不能是虚函数。一般会报错inline”是构造函数的唯一合法存储类。类有一个指向虚函数表的指针用于调用虚函数,这个指针是在构造函数里初始化的,如果构造函数是虚函数,怎么在没有初始化的情况下调用它?构造函数中最好不要调用虚函数,某些编译器会报错。因为先运行基类构造函数,再运行派生类的。基类的构造函数时已经出现了虚函数表指针,它指向基类的虚函数表,所以基类的构造函数中调用的虚函数是基类的。E...

2018-08-03 21:27:24 307

原创 C++笔试题(二)

函数指针函数指针本质还是指针,可以用来调用函数和传递参数。声明方式:type (*name)(形参表),另外常常与typedef结合使用。比如这样使用:int fun(int a,int b){ return a+b;}int (*pf)(int) = fun;cout<<pf(3,4)<<endl; // 7使用typedef:ty...

2018-08-03 21:22:26 228

空空如也

空空如也

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

TA关注的人

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