Linux
文章平均质量分 79
fsfsfsdfsdfdr
日更新一篇
展开
-
select、poll、epoll之间的区别
(1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。 (2)poll==>时间复杂度O(n) poll本质上和select没有区别,它将用...转载 2018-09-24 11:04:38 · 172 阅读 · 0 评论 -
C语言中volatile如何使用
volatile是一个类型修饰符(type specifier),就像我们熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量;volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。 volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。 作用 编辑 简单地说就是防止编译器对代码进行优...转载 2019-05-04 17:14:46 · 1729 阅读 · 0 评论 -
写时拷贝
传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下,因为它拷贝的数据也许并不共享,更糟的情况是,如果新进程打算立即执行一个新的映像,那么所有的拷贝都将前功尽弃。Linux的fork()使用写时拷贝(copy-on-write)页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要...转载 2018-09-28 10:42:34 · 123 阅读 · 0 评论 -
Linux系统内存管理之伙伴系统分析
1.伙伴系统概念 伙伴系统是一种经典的内存管理方法。Linux伙伴系统的引入为内核提供了一种用于分配一组连续的页而建立的一种高效的分配策略,并有效的解决了外碎片问题。 2.伙伴系统的组织结构 Linux中的内存管理的“页”大小为4KB。把所有的空闲页分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页块...原创 2018-10-06 10:28:28 · 162 阅读 · 0 评论 -
进程间通信方式剖析
进程间通信的方式有管道、信号、信息量、消息队列、共享内存、套接字 1)管道:无名管道和有名管道 无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无名管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样提供了两个进程之间数据流动的一种方...原创 2018-10-06 10:27:08 · 123 阅读 · 0 评论 -
Linux awk用法
在学习awk之前我们应该都学过sed,grep,tr,cut等等命令,这些命令都是为了方便我们对Linux下文本和数据的处理,但是我们会发现很多时候这些命令并不能一下子就完全解决我们的需求,很多时候我们都需要使用管道符结合这些命令来使用,今天我就给大家介绍一个命令awk,他就能很好的解决我们对文本和数据处理的需求,使我们一条命令就解决很多问题。 一、awk命令简介 awk被称为文本处理三剑客之...转载 2018-10-11 10:18:30 · 132 阅读 · 0 评论 -
Linux chmod 使用分析
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。 权限范围的表示法如下: u User,即文件或目录的拥有者;g Group,即...转载 2018-10-11 08:54:26 · 133 阅读 · 0 评论 -
Linux 文件颜色代表含义
文件颜色代表含义: 蓝色表示目录; 绿色表示可执行文件; 红色表示压缩文件; 浅蓝色表示链接文件; 白色表示其他文件; 黄色是设备文件,包括block, char, fifo。 ps:请叫我色盲,因为csdn颜色这有这几个...原创 2018-09-26 09:00:18 · 209 阅读 · 0 评论 -
Linux预处理、编译、汇编、链接的处理过程分析
一、预编译 1.将所有的#define删除,并展开所有的宏定义; 2.处理所有的预编译指令,例如:#if,#elif,#else,#endif; 3.处理#include预编译指令,将被包含的文件插入到预编译指令的位置; 4.添加行号信息文件名信息,便于调试; 5.删除所有的注释:// /**/; 6.保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#...原创 2018-09-26 08:55:05 · 151 阅读 · 0 评论 -
linux 内存分配的原理
内存分配的原理 从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。 1、brk是将数据段(.data)的最高地址指针_edata往高地址推; 2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。 这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的...转载 2019-06-01 22:47:35 · 1556 阅读 · 0 评论