Linux
qq_28110727
小小螺丝钉也有大大的梦想
展开
-
linux下makefile的编写
为什么需要makefile 在实际的开发中,源文件通常会不止一个,一个项目工程往往是分为多个模块,每个人去写不同的模块,最后整合在一起。但是如果我们仅仅只是使用gcc编译器来整合,这个过程是非常繁琐的。为了提高效率,往往会有一个或多个makefile.什么是makefile 在Linux中,有一个用来维护程序模块关系和生成可原创 2017-07-19 18:57:39 · 503 阅读 · 0 评论 -
muduo学习异常类
头文件#include 获取程序的堆栈信息的函数/* Store up to SIZE return address of the current program state in ARRAY and return the exact number of values stored. */int backtrace(void **array, int size);原创 2017-12-15 15:36:59 · 256 阅读 · 0 评论 -
Linux下原子操作函数
Linux 下gcc内置的原子操作函数头文件#include编译时需要加上-march= cpu-type(可以设置为native 让系统自动去检测)//先获取值再操作type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type原创 2017-12-15 15:34:18 · 2365 阅读 · 0 评论 -
Linux下时间相关
/*与时间相关的定义所在的文件夹/usr/include/time.h /usr/include/bits/time.hstruct timeval { time_t tv_sec; susecond_t tv_usec; //当前妙内的微妙数 };struct tm { int tm_sec; //当前秒 int tm_m原创 2017-12-15 15:33:02 · 290 阅读 · 0 评论 -
Linux下简单的线程池
1.为什么需要线程池?一般情况下,我们在处理高并发的数据量的时候,对每一个用户创建一个线程用来处理,任务完成后,销毁线程。假设时间开销 1.线程创建时间 2.线程执行时间 3.线程的销毁时间2.线程池原理线程池采用预创建的技术,在应用程序启动之后,立即创建一定数量的线程,放入空闲队列中,这些线程处于阻塞状态,不消耗CPU,只占用较小的内存。当创建的线程全部处于运行阶段,线程池将自动原创 2017-09-19 08:46:21 · 345 阅读 · 0 评论 -
LinuxIO多路复用之epoll
/* 谈到epoll,首先谈一下select和poll,我们发现这两种方式存储监听文件描述符的方式为数组 ,然后返回的是监听描述符中就绪的个数 我们如果要进行处理 我们还得去监听文件描述符的数组一个一个遍历 去判断哪个文件描述符就绪 才去处理数据 而epoll内部用于储存监听文件描述符的数据类型为红黑树 树这种数据类型的有点继承了链表和数组的优点 因此查找和删除节点都会很快原创 2017-09-15 22:28:36 · 218 阅读 · 0 评论 -
LinuxIO多路复用之poll
#include #include #include #include #include #include #include #include #include #define SERV_PORT 8080#define MAXSIZE 1024#define MAXLINE 64void sys_err(const char *fun_str,int exitno)原创 2017-09-14 18:38:29 · 170 阅读 · 0 评论 -
LinuxIO多路复用之select
#include #include #include #include #include #include #include #include #include #include #define SERV_PORT 8080#define MAXLINE 100#define MAXSIZE 1024void sys_error(const char *fun_st原创 2017-09-14 13:33:20 · 279 阅读 · 0 评论 -
Linux网络编程多线程模型
#include #include #include #include #include #include #include #include #define SERV_PORT 8080#define MAXLINE 100#define MAXSIZE 1024struct arg_info{ int connfd; struct sockaddr_in cli原创 2017-09-13 21:30:58 · 281 阅读 · 0 评论 -
Linux网络编程多进程模型
#include #include #include #include #include #include #include #define SERV_PORT 8080#define MAXLINE 100#define MAXSIZE 4096void sys_error(const char *fun_str,int exitno){ perror(fun_str原创 2017-09-13 20:37:36 · 240 阅读 · 0 评论 -
Linux网络编程基础
#include #include #include #include #include #include #include #define SERV_PORT 8080#define MAXLINE 100void sys_error(const char *fun_str,int exitno){ perror(fun_str); exit(exitno);}原创 2017-09-13 19:52:33 · 216 阅读 · 0 评论 -
Linux下信号详解
信号:当我们按下Ctrl+'C' /"D"/"\"/"Z"等组合键时,进程为什么会停止下来,实际上是我们给进程发出了信号,例如,我们在调试的过程中,程序异常终止时,常常会受到SIGSEGV信号,那么内核是如何来管理这些信号的呢?当有信号产生时,进程PCB会维护两个信号集,未决信号集和阻塞信号集。会将产生的信号对应的整数位设置为1,然后通过与BLOCK信号集的具体位作比较,当发现该信号位原创 2017-08-22 20:06:22 · 265 阅读 · 0 评论 -
Linux下静态库与动态库
静态库:在可执行程序之前就已经加载到可执行程序的代码中,是可执行程序的一部分。一般以.a作为静态库文件的后缀名,使用ar(archiver)命令可以创建静态库。优点:不会因为库文件的丢失而出现运行失败 缺点:维护和更新困难静态库:储存的是目标文件打包后形成的一个库文件生成步骤:1.编译源文件1 源文件2 ...2.b编译成目标文件1 目标文件2...原创 2017-08-14 20:57:25 · 164 阅读 · 0 评论 -
进程间通信-mmap
要想使用mmap实现进程间的通信,首先得去了解该函数.该函数有6个参数,可能以前没有见过这么多参数的函数原型,要想深入理解这些参数的意义,我们得需要了解mmap工作的原理。第一个为进程空间中内存地址的起始地址,第二个参数为在内存中的长度,第三个参数为执行的权限,第四个参数为内存映射的方式,第五个参数与为文件描述符,第六个参数与 为文件的偏移量。那么有一个问题便是,我们在原创 2017-08-06 20:20:32 · 344 阅读 · 0 评论 -
Linux下通过yum安装软件
今天在使用远程登录工具putty时,发现连接ubuntu链接被拒绝,然后重新再网上找到了openssh的软件包,在安装过程中出现了很多的小问题,因此,为了方便快速正确的安装自己想要的软件,决定重新看书写一遍关于yum安装软件的方式。首先,我们必须知道软件包的两种形式。二进制发布软件包Linux二进制发布软件包是指已经事先将应用程序编译成可执行的二进制形式,在安装时不需要用户重新编译。优点:原创 2017-08-04 23:28:36 · 370 阅读 · 0 评论 -
进程间通信--管道
管道主要用于具有血缘关系之间的进程进行通信,linux提供pipe()函数来创建管道,函数结果返回两个文件描述符。fd[0]和fd[1]前者用来读,后者用来写。管道是系统在内存中分配的一块缓冲区,其结构类型与循环队列类似。其通信方式为单工的,我们在通信过程中要么父写子读,要么子写父读。其结构大致如图:如果我们要实现父子进程之间的双向通信,可以申请两个管道。管道需要注意的几种原创 2017-08-04 20:04:37 · 137 阅读 · 0 评论 -
进程间通信-fifo
FIFO,同时也被称为有命管道,未命名的管道只能用于有亲缘关系之间的进程间的通信,而命名管道可以实现两个互不相关之间进程的通信。在Linux下,我们可以通过mkfifo命令创建命名管道,FIFO实际上并不占取实际的存储空间,只是在内核pipe中的一个链接。我们可以通过其大小来查看。FIFO实际结构为创建FIFO的函数为int mkfifo(const char*path原创 2017-08-04 20:07:47 · 243 阅读 · 0 评论 -
Linux下标准缓冲区的清空
当我们在使用scanf()函数读取标准输入时,其结果并不总是正确。有时,为了防止缓冲区数据对结果的影响,我们需要清空标准缓冲区。首先我们得知道在LINUX下标准I/O为我们提供了那几中类型的缓冲区。标准I/O库提供了3种类型的缓冲。1.全缓冲:在这种情况下,只有在填满缓冲区后才进行实际的I/O操作。2.行缓冲区:当输入和输出遇到换行符时,标准I/O库才进行实际的I/O操作。3.原创 2017-07-21 19:31:47 · 1593 阅读 · 0 评论 -
线程类基本封装
线程类面向对象风格:通过子类重写run方法 实现多态 从而实现依赖反转但我们要提供抽象类和接口将run()方法和startThread()方法声明的私有的 其实本没有有必要声明为公有的 我们在start------>startThread ---->runclass Thread{Thread();virtual ~Thread();void s原创 2017-12-15 15:38:18 · 965 阅读 · 0 评论