自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鸟欲高飞先振翅,人求上进先读书

你总是心太软,心太软, 把所有问题都自己扛·········

  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 epoll 惊群(Nginx 类似处理方案)

#include <sys/types.h>#include <sys/socket.h>#include <sys/epoll.h>#include <netdb.h>#include <string.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <errn

2017-10-24 16:42:35 572

原创 epoll中accept的使用细节

accept 要考虑 2 个问题 (1) 阻塞模式 accept 存在的问题 考虑这种情况:TCP连接被客户端夭折,即在服务器调用accept之前,客户端主动发送RST终止连接,导致刚刚建立的连接从就绪队列中移出,如果套接口被设置成阻塞模式,服务器就会一直阻塞在accept调用上, 直到其他某个客户建立一个新的连接为止。但是在此期间,服务器单纯地阻塞在accept调用上,就绪队列中的其他描述符

2017-09-06 16:04:37 2251

转载 gdb 如何调试绑定一个线程

info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all 在所有线程中相应的行上设置断点 thread apply ID1 ID2 command 让一个或者多个线程执行

2017-09-01 09:20:17 2385

原创 linux下的一个简单线程安全内存池实现

这里提供一个简单线程安全内存池, 基于linux pthread 如下图: 具体的数据结构: typedef struct LocMap{ char * point; int len; }LOCMAP;//每个数据块的起始指针和大小 int size; //内存池的大小 int datanum; //内存池内数据 int freemem; //剩

2017-08-23 15:10:43 1240

原创 服务器怎样处理连接超时和数据拼接

近期实现了一个linux epoll 服务器, 大致功能就是接收客户端数据,分析数据,按字段存入数据库, 是一个短链接服务, 从中收获良多,这里谈一下, 服务器开发中常遇问题和解决方案。 源码: https://github.com/BambooAce/Repository/tree/master/network/server_epoll 大致模型至于epoll 模型原理和使用网

2017-08-22 17:49:43 3219

原创 linux下软件安装apt-get yum dpkg rpm 的使用

Ubuntu Debian系统安装软件一般都是deb包, apt-get install * 也就是从源服务器下载deb包然后安装 ,它和Redhat中的yum install一样都可以帮你轻松的解决依赖性问题。Ubuntu系列软件管理:apt-get install * //安装某个软件包apt-get remove/autoremove * //移除软件包apt-get purge * /

2017-04-18 13:11:02 1136

原创 TCP/IP协议栈 -- 编写较稳定的client注意的细节

这张主要以实验形式观察一个简单的TCP 连接 实验代码如下:#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>#include <arpa/inet.h>#include <fcntl.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h

2017-03-30 13:05:14 789

原创 daemon 启动system V init 和 systemd 配置

先试着写一个udpserver的daemon#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#defi

2017-02-23 12:46:20 532

原创 TCP/IP协议栈 -----链路层

这节说一下链路层和ARP RARP协议链路层: 在协议栈中链路层的目的有三个:1. 为IP模块发送或接受数据包 2.为ARP模块发送或接受ARP请求 3. 为RARP模块发送或接受RARP请求。 让我们看一下最常用的以太网链路层封装格式 这里可以看到以太网协议头部有类型字段 来表明是IP 还是 ARP RARP数据包,尾部还有CRC校验码。环回接口:localhost 127类的地址,一个传

2017-02-15 13:05:42 367

原创 TCP/IP 协议 ----- 协议栈

文章是作者对tcp/ip协议族的一些看法,借鉴TCP/IP详解卷一的内容,进行总结归纳,并阐述自己的一些看法。TCP/IP协议栈· : 整个协议栈被分为了四层,每一层协议负责不同的功能:链路层:负责处理物理接口的细节,接受发送的都是比特流,链路层主要有三个目的: 1. 为IP模块发送和接收I P数据报;2. 为ARP模块发送ARP请求和接收ARP应答;3.为RARP发送RARP请求和接

2017-02-14 12:58:12 367

原创 Makefile中的变量和shell变量

我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节。让我们从一个简单的makefile来看看。 注意makefile中一定要有一个目标,且一定要有一个终极目标,若想要有多个目标应该设立一个伪目标。如下:all: hello hello2 hello3hello: hello.c gcc ....hello2: hello2.c

2017-01-12 13:29:54 2564

转载 SSL/TLS 握手过程详解

在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐、经济、社会关系等都离不开互联网的帮助。在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的。幸运的是,在大牛们的努力下,很早以前就有一套安全体系来保障互联网信息的传递。下面我们一起来了解一下这套体系。加密算法 首先我们需要了解一下加密相关的知识,加密可以分为对称加密和非对称加密。两者的主要区别就是是否使用同

2017-01-11 12:26:16 1300

转载 数字签名技术

1.什么是电子签名 电子签名指数据电文中以电子形式所含、所附用于识别签名人身份并表明签名人认可其中内容的数据。通俗地说,电子签名就是通过密码技术对电子文档的电子形式的签名,并非是书面签名的数字图像化,它类似于手写签名或印章,也可以说它就是电子印章。 电子签名主要有三个作用: (1)证明文件的来源,即识别签名人; (2)表明签名人对文件内容的确认;(3)构成签名人对文件内容正确性和完整性负责的

2017-01-11 10:48:42 584

原创 Docker理解

近期一直在研究Docker,感悟颇深,和大家分享一下Docker 在云计算中的应用和Docker的原理。 Docker 用法https://yeasy.gitbooks.io/docker_practice/content/Docker 是什么?有哪些用途? https://yeasy.gitbooks.io/docker_practice/content/introduction/what.

2017-01-06 12:53:59 712

原创 提高服务器并发量,有关系统配置的常规方法

一般情况下, 服务器的性能除了编程技巧之外,还有一些操作系统本身的限制。这里我们假设服务器CPU 内存都是能满足需求的。来说说Linux 服务器的一些提高性能的方法。文件描述符的限制 对于服务器,每当有一个连接到来都要消耗一个文件描述符,即系统对文件描述符的限制就成了高性能的障碍。我们可以用ulimit可以查看当前系统对资源的一些限制。# ulimit -acore file size

2017-01-05 12:52:57 606

原创 Linux EXT 文件系统 详解

上几章我们讲到了Linux启动的一些问题,接下来我们来看一下硬盘分割和EXT格式文件系统的问题。前面提到了分区表的问题,分区表位于MBR, 占用64个字节。所谓的硬盘分区也就是对硬盘进行规划,填写分区表的配置。硬盘默认分区表仅能写入四组分区信息。这四个主要分区我们称之为主分区和拓展分区,而后拓展分区里面又可以划分多个逻辑分区。 先让我们模拟一块硬盘:dd if=/dev/zero of=zero

2017-01-03 15:22:35 772

原创 gdb的多线程调试

info threads 可以查看当前进程有哪些线程thread ID 可以切换到线程IDbt 查看当前线程堆栈set scheduler-locking on多线程调试过程中, 线程会来回切换, 使用它即可锁定一个线程。当程序被打断点时, 所有线程都会停下 如果不希望其他线程也停下, 可以设置gdb如下(版本要7.0 以上):set target-async 1set paginat

2017-10-30 10:24:51 258

原创 struct 类型指针技巧

此类型对于两种结构的查找和删除都十分方便,实际项目中也常常用到。

2017-09-28 09:36:54 548

原创 accept 文件描述符用尽处理

if (events[i].data.fd == listenfd) { peerlen = sizeof(peeraddr); connfd = ::accept4(listenfd, (struct sockaddr*)&peeraddr, &p

2017-09-21 15:11:05 690

转载 makefile 中=与:=的差别

1、“=” make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子: x = foo y = $(x) bar x = xyz 在上例中,y的值将会是 xyz bar ,而不是 foo bar 。 2、“:=” “:=”表示变量的值决定于它在makefile中的位置,而不是整个

2017-09-15 11:38:55 228

原创 ubuntu debain下好用的编辑器

geany: 轻量级的IDE apt-get install geany 用来写shell脚本和python十分方便。特别写python脚本时,它有丰富的提示和自动补全功能。查看代码也很方便

2017-04-19 10:48:53 573

原创 TCP/IP 协议栈 ------ ICMP

I C M P经常被认为是 I P层的一个组成部分。它传递差错报文以及其他需要注意的信息。I C M P报文通常被I P层或更高层协议( T C P或U D P)使用。一些I C M P报文把差错报文返回给用户进程。 ICMP格式如下: 报文类型及相关说明如下:

2017-04-12 12:23:53 486

原创 TCP/IP 协议栈 -- 编写UDP客户端注意细节

上节我们说到了TCP 客户端编写的主要细节, 本节我们来看一下UDP client的几种情况,测试代码如下: server:#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/stat.h>#include <sys/types.h>#in

2017-04-05 13:23:28 327

原创 I/O复用中的 select poll 和 epoll

I/O复用中的 select poll 和 epoll: 这里有一些不错的资料: I/O多路复用技术之select模型: http://blog.csdn.net/nk_test/article/details/49256129Select的限制和poll(并发的初步知识)http://blog.csdn.net/nk_test/article/details/49283325epoll实现高

2017-03-20 13:02:31 419

原创 TCP/IP协议栈 ARP和RARP协议

上几章中我们提到以太网协议中,在以太网首部中一个帧类型的字段,它可以表示为IP ARP RARP协议。 这里说一下ARP 和RARP协议。 首先看ARP协议: 要想网络中的数据包准确到达某个主机,最后还是依靠MAC地址, 那么ARP协议就负责将IP地址映射为48位MAC地址,当数据包到达一个以太网内后,就要依靠mac地址找到相应的主机。下面这张图表达的十分清晰 当数据包到达以太网时, 它要

2017-03-13 12:18:58 662

原创 TCP/IP协议栈 --- IP路由

IP路由:当一个IP包在主机发送出去或者在网络当中时,是怎么选择路径到达目的主机的呢? 一般情况下, 如果说源主机和目的主机在同一个网络中的话,那个数据报可以直接到达目的主机而不经过路由器,下面可以试一下, 我的主机网络是192.168.1.2 ping 网络里面的另一台主机, 我们可以用traceroute或者tracepath看一下整个包在网络中的过程。~/Desktop$ tracepath

2017-03-03 12:08:58 590

原创 TCP/IP协议栈 --- 网络层(IP 首部 和分片)

IP 是TCP/IP协议栈中重要的层次, TCP UDP ICMP IGMP都是依赖IP层进行传输的。首先它是一种不可靠,无连接的协议。不可靠:它不保证IP包能正确到达目的地,无连接:表示IP并不会维护后续数据包的信息,每个数据包的传输都是独立的。数据包的可靠性需要依赖传输层协议来保证如TCP协议,也就是说当一个比特流从网络接口发送向网络之后,所经过的每个路由器会解析数据包的网络层的信息,再通过路由

2017-02-21 12:56:47 388

原创 Docker 使用教程

概括  Docker与传统虚拟机的区别 与传统虚拟机的区别  Docker的安装 的安装  Docker daemon , client , containerd  镜像与容器操作  容器运行配置  Docker网络配置 网络配置  Alpine Docker Image  制作自己的 Docker Image  Docker安全性问题 安全性问题  Dock

2017-02-14 13:27:59 1371

原创 Linux启动 grub 虚拟文件系统initrd详解(三)

在内核找到硬盘的/sbin/init后,就开始了第一号进程,此进程的主要目的是:准备软件执行的环境,包括系统的主机名,网络配置,语系处理,文件系统格式及其他服务的启动。主要是通过/etc/inittab来规划。 我们可以看到它默认选择3运行级别。 之后会使用/etc/rc.d/rc.sysinit进行系统初始化 大致是用来读取网络环境和主机类型;测试与挂载内存设备/proc和usb设备;用户

2016-12-31 16:10:45 663

原创 Linux启动 grub 虚拟文件系统initrd详解(二)

上文我们分析了启动和grub的一些东西,这节让我们讨论一些linux内核加载启动和虚拟文件系统initrd的问题。 首先还是grub的menu.lst 其中关于default 和timeout的讲解网上都有说明 这里的root(hd0,0) 代表的以下的kernel和initrd文件系统所在的位置是第一块硬盘的第一个分区,这个可以根据自己内核存放位置设置,但是要注意grub的文件系统类型。ke

2016-12-30 18:10:35 2123

原创 Linux启动 grub 虚拟文件系统initrd详解(一)

Linux的启动时一个复杂的过程: 加载 BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置; 读取并运行第一个启动装置内 MBR 的 boot Loader (亦即是 grub, spfdisk 等程序); 依据 boot loader 的配置加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序; 在硬件驱动成功后,Kernel 会主动呼叫 i

2016-12-30 16:59:07 1815

MySQL学习资料

MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

2014-09-20

空空如也

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

TA关注的人

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