- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 MySQL 常用命令
1、登录mysqlmysql -u root -p表show databases;±-------------------+| Database |±-------------------+| information_schema || mysql || performance_schema || selecttest || sys |±-------------------+5 row
2020-09-09 01:01:24 289
原创 高级I/O函数
1 pipe 函数 pipe创建一个管道,用户进程间的的通信。#include<unistd.h>int pipe(int fd[2]);输入是 一个容量为2的数组输出: 成功:0 失败:-1 errno返回值一个代表写端一个代表读端,fd[1]写段,fd[0]读端。只可以单向通信,假如需要双向,需要创建两个管道。并且这两个文件描述符默认都是阻塞的,但也可以通过fctnl去改成非阻塞。在非阻塞的情况下,read时只有在引用计数为0时,才会返回0;write则是,引发SIGP
2020-09-08 22:08:49 185
转载 GDT,LDT,GDTR,LDTR 详解
1 基本概念 所谓工作模式,是指CPU的寻址方式、寄存器大小、指令用法和内存布局等。实模式 段基址:段内偏移地址”产生的逻辑地址就是物理地址,即程序员可见的地址完全是真实的内存地址。保护模式 在保护模式中,内存的管理模式分为两种——段模式和页模式。其中页模式也是基于段模式的。也就是说,保护模式的内存管理模式事实上是:纯段模式和段页式。进一步说,段模式是必不可少的,而页模式则是可选的——如果使用页模式,则是段页式,否则这是纯段模式。GDT 全局描述符表GDT(Global
2020-08-23 22:32:28 2073
原创 定时器的设计
如果某一用户connect()到服务器之后,长时间不交换数据,一直占用服务器端的文件描述符,导致连接资源的浪费。这时候就应该利用定时器把这些超时的非活动连接释放掉,关闭其占用的文件描述符。这种情况也很常见,当你登录一个网站后长时间没有操作该网站的网页,再次访问的时候你会发现需要重新登录。 网络程序需要处理的第三类是定时事件,比如定期检测一个客户连接的活动状态。 主要有三种 1.socket选项中的SO_RCVTIMEO和SO_SNDTIMEO。 2.SIGANLRM信号 3.I/O复
2020-08-23 13:39:05 752
原创 服务器开发中用到的IO函数
1、readv()和writev() 主要是因为平常所用到的write与read只是用来对一片连续的内存区域进行操作。read对一篇连续区域的读操作,write对一篇连续区域的写操作。但对于非连续区域的操作用read或者write来,就效率低了很多了。readv和writev就是用来处理非连续区域(或者说,多片连续区域的读写操作的) 因为使用read()将数据读到不连续的内存、使用write()将不连续的内存发送出去,要经过多次的调用read、write。如果要从文件中读一片连续的数据至进程的不同区
2020-08-19 20:01:41 210
转载 管道的内部实现
Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: 限制管道的大小。实际上,管道是一个固定大小的缓冲区。在Linux中,该缓冲区的大小为1页,即4K字节,使得它的大小不象文件那样不加检验地增长。使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够
2020-08-19 10:43:55 748
原创 高性能服务器程序框架
本节主要包括三个模块1、I/O处理单元,I/O的四种模型,两种高效的处理模式2、逻辑单元:两种高效并发模式,以及高效的逻辑处理方式–有效状态机3、存储单元1、服务器模型1.1 C/S模型 TCP/IP协议里面没有客户端与服务器的概念,通信过程都是对等的,只是由于人们的大部分的访问形式都是:多个用户向资源拥有方提出访问申请,资源拥有方提供资源响应。 C/S模型特别适合资源相对集中的场合,实现也很简单,但是缺点也很明显,就是访问量很大时,可能客户端会得到很慢的响应。p2p刚好就解决了这
2020-08-18 21:10:15 199
原创 mysql中各个语句的执行顺序
1、MySQL查询语法顺序1:select2:from3:left … join4:on5:where6:group by7:having8:order by9:limitselect 考生姓名, max(总成绩) as max总成绩 from tb_Grade where 考生姓名 is not null group by 考生姓名 having max(总成绩) > 600 order by max总成绩 (1). 首先执行 FROM 子句, 从 tb
2020-08-17 15:09:58 542
原创 进程状态--生活中的小例子
进程有五状态,我们吃饭也有五状态。进程吃饭创建有了吃饭的想法就绪已经在排队了执行已经轮到我打饭了终止饭都已经吃完了等待阻塞饭卡没带,在队伍之外等待同学带卡...
2020-08-13 14:01:18 2377
原创 linux中与线程同步的API
1 互斥锁pthread_mutex_init函数int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)这里的restrict关键字,表示指针指向的内容只能通过这个指针进行修改restrict关键字:用来限定指针变量。被该关键字限定的指针变量所指向的内存操作,必须由本指针完成。初始化互斥量:示例pthread_mutex_t mutex;pthr
2020-08-13 07:53:57 152
原创 C预处理器、作用域、static、const以及内存管理
1.4.3 修饰函数参数与返回值cosnt既可以修饰函数返回值、各参数、函数自身。const 修饰返回值返回值有三种:值返回、指针返回、引用返回。对于内部数据类型来说,返回值是否是常量没有区别。当时自定义的数据类型的时候,有时候不是const返回,会造成一定的困扰。对于指针而言,注意不能返回指向局部栈变量的指针,返回时是无效的。指向堆或者data或者bss区时可以的。const 修饰函数 参数参数以值传递的时候,加const 意义也不大。主要还是对于地址。因为假如传递地址的时候,不加cons
2020-08-13 07:29:32 113
原创 面试中常问的STL
1Vector1.1 底层是如何实现的在堆中或栈中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放.如果新值>当前大小时才会再分配内存.当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。扩容一般是扩大1.5倍或者2倍,vs中扩容的是1.5倍。内部使用allocator类进行内存管理,程序员不需要自己操作内存。对 vector 的任何操作,一旦引起空间重新配置,指向原 vector 的所有迭代器就都失效了。vector就是一个动态数组,里面有一个指针指向一
2020-08-13 02:26:19 452
原创 指针与引用
1 指针1.1 指针定义string *ps1,ps2;stiing *ps1,*ps2;1.2 typedef用一种新类型名来替换新的类型名,也就是用类型起了一个别名。typedef 类型名 标识符1.3 void* 指针C++ 提供一种特数的指针类型 void* ,它可以保存任何类型对象的地址:只能进行有限个操作与另一个指针进行比较向函数传递 void* 指针或从函数返回 void* 指针给另外一个void* 指针赋值不允许使用void * 指针操作它所指向的对象
2020-08-11 00:25:11 189
原创 函数
1 参数传递c值传递指针传递c++值传递指针传递引用传递准测只是用值 const引用会有值的变化 引用引用与指针的区别阅读体验性较差2 内联函数用inline 关键词修饰的函数1 .成员函数称为内联函数在类中定义的成员函数全部默认为内联函数,可以显性的加上inline标识符,或者不加。在类中声明的成员函数,如何加上了inline,则其为内联函数,如果没加,在类外定义该成员函数时加上了,则该成员函数也为内联函数。2. 普通函数称为内联函数
2020-08-10 23:20:07 128
原创 linux系统编程——————线程
1 相关的API#include <pthread.h>*int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);pthread_t参1:传出参数,表新创建的子线程 id参2:线程属性。传NULL表使用默认属性。参3:子线程的回调函数是一个返回值是泛型指针的函数。创建成功,ptherad_create函数返
2020-08-10 21:50:28 135
原创 IO复用的各种测试
1 未经任何优化的服务器1.1 代码#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <strings.h>#include <string.h>#include <ctype.h>#include <arpa/inet.h>#define SERV_PORT
2020-08-10 21:02:20 252
原创 IO复用的生活小例子
1 select的小模型想象一下,有一天你们学校提供订蛋糕服务,蛋糕不需要你自己去拿,而是在你们直接想你们寝室同一个管道,蛋糕直接通过管道运输过来,爽不爽?你们到时爽,那可是辛苦了蛋糕店老板。这一天,老板突发奇想,想搞一个这个全国唯一的订蛋糕服务。小明听说了,可是不爽,因为每次老板想出来这个奇怪的想法,吃苦的都是他,那一次不是他给老板擦屁股。但这次,小明也觉得这个提议挺有意思的,于是小明也很乐意就接下来了老板这个活。他捋了一下思路:同学想要订餐服务,就必须提供一个管道给同学。蛋糕的保存时间特别短,不可
2020-08-10 13:20:35 310
原创 linux中的文件
1 基本概念1.1 目录与目录项目录是一种特殊的文件。目录里有什么? 目录和文件!那么怎么记录这些目录和文件?一个个的目录项。目录项里有什么?1.文件名(目录名)2. i-node(节点编号)保存了文件的属性及其真正的数据存放位置等信息。还有就是我们一般所说的inode更多是inode 的编号,而inode应该准确的来说,应该是一个数据结构。1.2 inodeinode是一个数据结构记录了很多关于文件的信息。(1)文件大小 Size(2)占用block数目(3)拥有者和所属组的ID A
2020-08-09 17:54:35 117
原创 文本操作中的剪切跟复制的实现机理
1 复制首先将复制的一个直观过程描述一下。打开一个文件,选中一段问题,点击复制。可以看到从直观上来看,我们复制一个文件需要三个步骤,那么系统底层是如何操作的呢。首先系统底层(以linux为例)全部读写操作都是跟open(),read(),write()相关。现在我们可以来分析下底层的实现了。首先系统会利用open函数打开文件,同时返回这个文件的描述符,用来对文件进行访问(这个文件描述符是一个接口,实际上的实现是通过指针实现的),然后在通过lseek函数调整读取文件的位置,设置为我们光标选中那一段文字的
2020-07-05 13:06:06 1613
原创 linux中 用于目录管理的系统调用
1 inode解inode,要从文件储存说起。文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者
2020-07-05 09:25:57 164
原创 c语言中常见运算符优先级说明————例子
1 运算符优先级就跟加减乘除一样,在程序语言计算里面也有一个先后次序问题。只不过复杂性要比我们简单的加减乘除要复杂得多,里面不管是我们熟悉的数学运算,还是逻辑运算,比较运算。而这些运算也正是计算机可以解决各种错综复杂问题的来源之一。我们可以做一个总结:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。运算符优先级统计表上表中可以总结出如下规律:结合方向只有三个是从右往左,其余都是从左往右。所有双目运算符中只有赋值运算符的结合方向是从右往左。另外两个从右往左结合
2020-07-04 15:24:24 5458
原创 常量折叠解析
1.1 系统内置类型#include<iostream>using namespace std;int main(){ const int test = 10; int* p = const_cast<int*>(&test); *p = 20; cout << "test的地址为:" << &test << " test的值为:" << test << endl;; cout <
2020-06-22 11:07:35 198
原创 C++中 const解析
一、const基础const修饰的是常量,定义的时候必须初始化,这里只做举例说明。const常量不能直接对const常量进行修改,但可以通过其他手段进行修改(伏笔)。const int a;int const b;//以上这两种写法是一样的const int *c; //const修饰的是指针所指向的内存空间,不能被修改int *const d; //const修饰的是指针变量,即指针变量本身不能被修改const int *const e; //指针变量以及其所指向的空间都不能被修改c
2020-06-21 18:57:54 342
转载 变量声明与定义的区别
我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的...
2019-06-26 18:16:35 533
原创 中英文字符编码存储空间大小
英文字母:·字节数 : 1;编码:GB2312字节数 : 1;编码:GBK字节数 : 1;编码:GB18030字节数 : 1;编码:ISO-8859-1字节数 : 1;编码:UTF-8字节数 : 4;编码:UTF-16字节数 : 2;编码:UTF-16BE字节数 : 2;编码:UTF-16LE中文汉字:字节数 : 2;编码:GB2312字节数 : 2;编码:GBK字节数 :...
2019-06-25 15:10:47 1781
转载 LZW编码实现(C)
LZW压缩算法由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这...
2019-06-25 15:07:30 3169 1
转载 快速转载博客
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tajiaowm/article/details/79612125 </div> ...
2019-06-25 15:01:42 164
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人