自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李邦柱的专栏

一起学习,共同成长

  • 博客(22)
  • 资源 (3)
  • 收藏
  • 关注

原创 Golang 学习,第一篇:环境配置

Golang 学习,第一篇:环境配置欢迎来到Go的世界,让我们开始探索吧! Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。 Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格 include文件与库的开头。它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。 Go为软件构造

2016-01-30 18:10:35 760

原创 Linux Socket编程注意事项

Socket API 是网络应用程序开发中实际应用的标准 API。尽管该 API 简单,但是开发新手可能会经历一些常见的问题。本文识别一些最常见的隐患并向您显示如何避免它们。

2015-07-06 17:34:55 1243

原创 高性能定时器时间轮的实现

关于定时器有很多种,有基于升序的定时器时间链表,但是这种链表存在效率的不足,就是当插入定时器的时候时间复杂度是O(n).今天,我们来认识一下高性能定时器时间轮。

2014-07-03 23:04:27 6106 1

原创 基于线程池模型的讨论与完整代码演示

线程池引入的必要性:在网络服务器中,包括大量的web服务器,它们都需要在单位时间内必须处理相当数目的接入请求以及数据处理。通常在传统多线程服务器中是这样实现的:一旦有个请求到达,就创建一个线程,由该线程执行任务,任务执行完毕后,线程就退出。这也就是通常所说的及时创建,及时销毁策略。

2014-06-26 14:59:38 909 1

原创 为什么很多编程语言数组的下标从0开始

什么是数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。他的关键词里有三个:线性表连续的内存空间相同的数据类型线性表:表示数据是一种线性的排列方式连续的内存空间,方便数据的随机访问,相同的数据类型保证了在连续的内存空间内的数据格式相同。数组在内存中的寻址公式:a[i]=baseAddress+i*arrTypeSizebaseAddress表示数组的起始地址,即a的内存地址arrTypeSize 表示数组中每个元素的大小。优点高

2020-09-14 11:21:15 470

原创 Golang Context的常规操作

Golang Context的常规操作contextcontext是go的并发编程的常用模式,可以通过context来处理超时,取消任务等一系列操作用context 取消任务示例func main() { parentCtx, cancel := context.WithCancel(context.Background()) for i := 0; i < 10; i++ {//启动10个goroutine childCtx, _ := context.WithCancel(pa

2020-08-11 14:11:58 153

转载 TCP协议疑难杂症全景解析

说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,

2015-08-06 11:27:31 726

转载 服务器-TCP 在 EPOLL 模型中的注意细节

前段时间在公司开发了基于udp的流媒体转发服务器,在公网udp转发ts,花屏比较严重。课下之余写了epoll-tcp模型的转发服务器作为测试,比较一下效果,其间遇到不少问题,在此做个笔记。代码最后附上一、业务需求:终端录制视频(android编码h264)  客户端请求视频  服务器负责转发因为是测试用没有考虑配置文件,负载均衡,安全认证等二、协议指定1、音

2015-08-06 10:04:13 1337

转载 epoll精髓

分类: linux 网络2013-02-28 15:11 290人阅读 评论(0) 收藏 举报目录(?)[+]http://www.cnblogs.com/OnlyXP/archive/2007/08/10/851222.htmlepoll精髓在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替

2015-08-06 09:43:40 466

原创 Linux 文件描述符设置为非阻塞的方法

通过多种方法设置文件描述符为非阻塞

2015-07-07 11:05:13 8421

原创 Linux Socket API Connect 函数详解

在讲解套接字编程函数之前,有必要对socket编程的两个不可或缺的结构体进行说明。第一个结构体式struct sockaddr.。这个结构为许多类型的套接字储存套接字地址信息: Sockaddr结构体介绍1. #include 2. 3. struct sockaddr { 4. uint8_t sa_len;   5. unsigned shor

2015-07-06 18:04:21 870

原创 Linux Sendfile 的优势

Sendfile 函数在两个文件描述符之间直接传递数据(完全在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率很高,被称之为零拷贝。Sendfile 函数的定义如下:#include<sys/sendfile.h>ssize_t sendfile(int out_fd,int in_fd,off_t*offset,size_t count);

2015-07-06 17:50:26 1158

原创 C++私有成员变量被对象直接访问

C++访问控制:对象直接访问私有变量

2014-11-13 11:01:03 6510

原创 Linux下C与Mysql的混合编程

本文详细介绍了linux 下mysq的安装,使用,以及如何打开mysql引擎。并给出示例代码演示C语言与mysql的使用关系

2014-09-30 12:41:42 1897

原创 升序定时器的时间链表的完全实现

本文详细阐述了定时器的原理,使用方法,以及示例代码,定时器通常包含至少两个成员:一个超时时间(通常采用相对时间或者超时时间)和一个超时时间到达后的一个回调函数。

2014-07-02 19:06:46 2837 1

原创 C/C++位的移位操作

左移与右移1.左移运算符()是双目运算符,其功能是把"运算符左边的运算数的各二进位全部左移若干位,移动的位数由"运算符右边的数指定,高位丢弃,低位补0。     例如:Int a = 0x1234;Unsigned char* p =(unsigned char*)&a;a = *(p)此时a的最左端一个字节移动8位,a=0x3400; 

2014-06-20 18:17:41 2398

原创 C/C++ &与&& |与|| 的区别

&&表示逻辑与的意思,即为and。当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。比如 12&&23的结果就是1,12&&-1 的结果是1,123&&0的结果就是0 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(

2014-06-20 18:16:02 4981

原创 C++ STL之map的使用方法

map解释map(映射)——经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序或搜索时使用,它的值可以在容器中重新获取;而另一个值是该元素关联的数值。比如,除了可以ar[43] ="overripe"这样找到一个数据,map还可以通过ar["banana"] ="overripe"这样的方法找到一个数据。如果你想获得其中的

2014-06-19 12:53:16 751

原创 C++ STL容器适用情况的说明

各种容器的特性vector典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取、修改具有常数时间复杂度,在序列尾部进行插入、删除是常数时间复杂度,但在序列的头部插入、删除的时间复杂度是O(n),可以在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。deque序列容器

2014-06-19 12:51:44 800

原创 C/C++ 宏中“#"和"##”的常见用法

一般用法通常情况我们一般把宏#参数变为一个字符串,形如:123--->”123”,当然这种转换方法很多譬如:itoa,sprintf等函数都可以完成,但是如果频繁的调用这些系统调用的话,会造成较大的系统开销,使用宏#不失为一种高效便捷的手段,用##把两个宏参数贴合在一起.简单的方法。

2014-06-19 12:47:43 696

原创 C++构造函数为什么不能是虚函数

原因1:从存储空间角度   这里你需要知道一个概念,那就是虚函数表vtbl,每一个拥有虚成员函数的类都有一个指向虚函数表的指针。对象通过虚函数表里存储的虚函数地址来调用虚函数。   那虚函数表指针是什么时候初始化的呢?当然是构造函数。当我们通过new来创建一个对象的时候,第一步是申请需要的内存,第二步就是调用构造函数。试想,如果构造函数是虚函数,那必然需要通过vtbl来找到虚构造函数的入口

2014-06-19 12:42:56 1331

原创 Linux input 子系统详解与代码示例

由于linux 的驱动模型增加了input层,导致几乎所有的底层驱动都把数据封装在event里上报给input子系统。由此看来,这种改变让kernel 更具有模块化,各个模块的耦合度更低了。下面我们一起来研究input 层^_^1.      从用户层的角度看input(event 事件)了解linux的人一定会对/dev,/ sys, /proc这几个目录有所印象,这是从内核导出到用

2014-01-09 21:33:24 2317

http协议的下载程序源码

可以下载http服务器上的文件,在linux 环境下使用,共两个代码文件 http_download.h http_download.c 。一个说明文件 README。 已经在Ubuntu 上测试过。 READ ME 中附带了使用示例。

2013-12-27

语音朗读,识别

能够识别中英日三国语言,你可以在文本框中 输入文字,点击按钮后,就会自动朗读,很标准。

2013-12-20

IP测探工具

对各种形式的探测都有效果 能够测探网页,邮箱,QQ所在主机上的IP

2011-09-04

空空如也

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

TA关注的人

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