自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

转载 1、神奇高效的Linux命令行

一、为什么要学linux命令Linux是由命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平,命令行方式的操作永远是不会变的。Linux命令有许多强大的功能:从简单的磁盘操作、文件存取,到进行复杂的多媒体图像和流媒体文件的制作,都离不开命令行。虽然Linux也有桌面系统,但是X-window也只是运行在命令行模式下的一个应用程序。因此,可以说命令是学习Linux系统的基础,在很...

2019-09-06 17:26:47 262

原创 19、《Libevent中文帮助文档》学习笔记19:全文总结

libeventlibevent实际上就是对底层select/poll/epoll等进行了封装,每个event_base都有一种方法,该方法是select、poll、epoll、kqueue、devpoll、evport、win32。event_base使用libevent函数之前需要分配一个或多个event_base,每个event_base持有一个事件集合,可以检测以确定哪个事件是...

2019-09-26 15:02:55 219

原创 18、《Libevent中文帮助文档》学习笔记18:LibEvent编程示例

1 event客户端服务端示例客户端:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include ...

2019-09-26 14:16:49 205

原创 17、《Libevent中文帮助文档》学习笔记17:废弃的DNS接口

待补充。

2019-09-26 09:11:51 107

原创 16、《Libevent中文帮助文档》学习笔记16:DNS服务器接口

待补充。

2019-09-26 09:07:38 123

原创 15、《Libevent中文帮助文档》学习笔记15:底层DNS接口

待补充。

2019-09-26 09:07:01 95

原创 14、《Libevent中文帮助文档》学习笔记14:使用LibEvent的DNS:高和低层功能

待补充

2019-09-26 09:02:30 106

原创 13、《Libevent中文帮助文档》学习笔记13:接受一个TCP连接

待补充。

2019-09-26 08:57:39 98

转载 9、Linux下很有用的命令LD_DEBUG

原文引述一下memcached的问题:LD_DEBUG 是 glibc 中的 loader 为了方便自身调试而设置的一个环境变量。通过设置这个环境变量,可以方便的看到 loader 的加载过程。 以在 64位 centos 上编译安装 memcached 为例,安装阶段顺利,执行 memcached 命令时出现错误:#memcached –h/usr/local/memcached/...

2019-09-23 17:29:34 1806

转载 8、Linux工具之ldd

作用:用来查看程序运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。/opt/app/todeav1/test$ldd testlibstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)...

2019-09-23 17:11:03 200

原创 13、《Libevent中文帮助文档》学习笔记13:Linux下集成、运行libevent

Linux下编译libevent的指导可以参考《4、《Libevent中文帮助文档》学习笔记4:Linux下编译libevent》,完成编译、安装,生成so库后,其他程序即可依赖libevent的so库,使用libevent的功能。由于没有通过prefix指定安装路径,因此库文件默认安装在/usr/local/lib下,头文件在/usr/local/include下,如下所示:如图...

2019-09-23 16:48:30 426

原创 12、《Libevent中文帮助文档》学习笔记12:evbufferIO实用功能

LibEvent的bufferevent实现了向后添加数据和前面移除数据的优化字节序列。evbuffer用于处理完IO的缓冲部分。它不提供调度IO或当IO就绪时触发IO的功能:这就是bufferevent所做的事。除了特定说明外,本章的函数定义在<event2/buffer.h>中。1 创建或释放一个evbuffer接口struct evbuffer* evbuffer...

2019-09-21 17:59:34 147

原创 11、《Libevent中文帮助文档》学习笔记11:高级话题

本章描述bufferevent的一些对通常使用不必要的高级特征。如果只想学习如何使用bufferevent,可以跳过这一章,直接阅读下一章。待补充

2019-09-21 17:45:35 116

原创 10、《Libevent中文帮助文档》学习笔记10:Bufferevent概念和入门

很多时候,除了响应事件之外,应用还希望做一定的数据缓冲。比如说,写入数据的时候,通常的运行模式是:决定要向连接写入一些数据,把数据放入到缓冲区中; 等待连接可以写入; 写入尽量多的数据; 记住写入了多少数据,如果还有更多数据要写入,等待连接再次可以写入;这种缓冲IO模式很通用,libevent为此提供了一种通用机制,即bufferevent。bufferevent由一个底层的传输端口(...

2019-09-21 15:22:46 281

原创 9、《Libevent中文帮助文档》学习笔记9:辅助类型和函数

<event2/util.h>定义了很多在实现可移植应用时有用的函数,libevent内部也使用这些类型和函数。1 基本类型evutil_socket_t在除Windows之外的大多数地方,套接字是个整数,操作系统按照数值次序进行处理。然而,使用Windows套接字API时,socket具有类型SOCKET,它实际上是个类似指针的句柄,收到这个句柄的次序是未定义的。在Win...

2019-09-21 11:08:43 130

原创 8、《Libevent中文帮助文档》学习笔记8:处理事件

libevent的基本操作单元是事件,每个事件代表一组条件的集合,这些条件包括:文件描述符已经就绪,可以读取或者写入 文件描述符变为就绪状态,可以读取或者写入(仅对于边沿触发IO) 超时事件 发生某信号 用户触发事件所有事件具有相似的生命周期。调用libevent函数设置事件并且关联到event_base之后,事件进入"已初始化(initialized)"状态。此时可以将事件添加到e...

2019-09-20 17:18:58 187

原创 7、《Libevent中文帮助文档》学习笔记7:事件循环

1 运行循环有了event_base,并且有一些event注册到其中(关于怎样创建和注册event请参考下一章节),就需要等待这些event通知你他们发生了什么。接口#define EVLOOP_ONCE 0x01 #define EVLOOP_NONBLOCK 0x02 #define EVLOOP_NO_EXIT_ON_EMPTY 0x04 int event_base_...

2019-09-20 15:32:35 370

原创 6、《Libevent中文帮助文档》学习笔记6:创建event_base

在你能使用任何感兴趣的LibEvent函数之前,你需要分配一个或多个event_base结构体。每个event_base结构体拥有一系列的event,并且可以通过轮询判断哪个event是激活的。如果一个event_base设置为使用锁定,在多个线程中访问它是安全的,然而只能在一个线程中去处理其事件循环。如果你想在多线程中轮询IO,那么你需要为每个线程分配一个event_base。注意未来...

2019-09-20 14:31:08 265

原创 5、《Libevent中文帮助文档》学习笔记5:设置LibEvent库

LibEvent在进程中有一些影响整个库的全局设置,在你调用LibEvent库中任何一个部分之前都需要进行设置,否则libEvent将会进入不一致的状态。1 日志LibEvent能记录内部的错误和警告日志,如果编译进日志支持功能,也会记录调试信息。默认情况下这些消息都是输出到stderr,你也可以通过提供自己的日志函数的方法来覆盖这种行为。接口#define EVENT_LOG_...

2019-09-19 17:21:50 285

原创 4、《Libevent中文帮助文档》学习笔记4:Linux下编译libevent

1、下载libevent软件包 直接在官网上下载软件包后解压libevent-2.1.8-stable.tar.gz即可。2、在Linux编译机上编译libevent 运行如下命令,将libevent-2.1.8-stable.tar.gz上传到Linux编译机上:scp libevent*.tar.gzroot@100.**.***.**:/opt/test ...

2019-09-19 15:49:07 233

原创 3、《Libevent中文帮助文档》学习笔记3:LibEvent简介

LibEvent是用于编写高速可移植的非阻塞IO库,它的目标是:可移植性:使用LibEvent编写的程序应该在LibEvent支持跨越的所有平台上工作,即使没有更好的方法来处理非阻塞式IO,LibEvent也应该支持一般的方法使程序可以运行在某些限制的环境中; 速度:LibEvent试图在每一个平台实现最快的非阻塞式IO,而不会引入太多的额外开销; 可扩展性:LibEvent设计为即使在成...

2019-09-19 15:42:08 148

原创 2、《Libevent中文帮助文档》学习笔记2:一个基于LibEvent 实现的低级 ROT13 Server

下面有另一个版本的ROT13异步服务器,这一次,我们将使用LibEvent2来代替select(),注意fd_sets已经变为:使用通过select()、poll()、epoll()、kqueue()等一系列函数实现的event_base结构来聚合和分离事件。/*For sockaddr_in*/#include <netinet/in.h>/*For socket func...

2019-09-19 14:37:37 170

原创 28、select函数

在之前的文章中,我们介绍了TCP Socket函数的使用,并实现了简单的TCP Server和TCP Client,采用的是TCP阻塞模式。关于阻塞模式的介绍,可以参考https://blog.csdn.net/w00347190/article/details/100172662。采用阻塞模式时,线程会处于等待状态,一个线程只能处理一个连接,服务端想要处理多个客户端连接,必须为每个连接创建一个线...

2019-09-18 20:35:47 251

原创 27、fd_set与FD_SETSIZE详解

select()机制中提供一种fd_set的数据结构,它实际上是long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执行了select()的进程哪一socket或文件发生了可读或可写事件。fd_set结构体原型:...

2019-09-18 10:07:21 11940

转载 7、Linux软件安装中RPM与YUM 区别和联系

1 Linux软件安装概述安装程序的方式:通用二进制格式:直接解压压缩文件,就可以使用。但一定要注意安装平台。 软件包管理器:如RPM。 软件包管理器的前端工具:如YUM。 源代码编译。1.1 软件包概述软件包的组成部分:二进制程序,位于/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin等目...

2019-09-16 16:36:45 198

转载 6、Linux软件安装管理之——dpkg与apt-*详解

一、序言 上一篇文章《Linux软件安装管理之——源码安装详解》详细介绍了Linux平台下的源码包安装原理,虽然使用源代码进行软件编译可以具有定制化的设置,但对于Linux distribution的发行商来说,则有软件管理不晚的问题,毕竟不是每个人都会进行源代码编译的。这个问题将会严重的影响linux平台上软件的发行与推广。 为了解决上述的问题,厂商先在他们的...

2019-09-16 16:29:11 414

转载 5、Linux软件安装管理之——RPM与YUM详解

一、序言 上一篇文章《Linux软件安装管理之——源码安装详解》详细介绍了Linux平台下的源码包安装原理,虽然使用源代码进行软件编译可以具有定制化的设置,但对于Linux distribution的发行商来说,则有软件管理不便的问题,毕竟不是每个人都会进行源代码编译的。这个问题将会严重的影响linux平台上软件的发行与推广。 为了解决上述的问题,厂商先在他们的...

2019-09-16 15:05:35 336

转载 4、Linux软件安装管理之——源码安装详解

一、安装包分类在Linux平台下,软件包的类型可以划分为两类:源码包、二进制包。源码包:即程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后再压缩的资源包)。二进制包:如 Red Hat发行版的.rpm包,Debian发行版的.deb包。这篇文章将要介绍的是Linux平台下的源码安装,关于二进制包的安装可以查看我的另两篇文章:《Linux软件安装管理之——RPM...

2019-09-12 14:33:22 459 1

原创 1、《Libevent中文帮助文档》学习笔记1:一个小的异步IO例子

许多初学者往往都是使用阻塞式IO调用进行编程。当你调用一个同步IO的时候,除非操作系统已经完成了操作或者时间长到你的网络堆栈放弃的时候,否则系统是不会返回完成的。举个例子,当你调用"connect"做一个TCP连接的时候,你的操作系统必须排队处理来自发送到服务器的SYN包,除非等到SYN_ACK包从对面接收到,或者是超时,否则操作是不会返回给你的应用程序。这里有一个很简单的阻塞式网络调用的...

2019-09-09 19:52:23 192

转载 4、linux命令在系统中的查询顺序、分类和基本使用

linux命令在系统中的查询顺序在系统中输入一条命令时,系统的查询查询顺序为linux命令的分类内部命令:命令本身存放在系统内存中,是shell程序的一部分,这些命令由shell程序内部完成运行,不需要添加运行程序。 外部命令:因为命令功能比较大,所以在系统启动加载时不会存放在内存中,只有在使用时才会加载到内存中。 用type命令可以查询:[root@centos6 app]#...

2019-09-06 17:47:32 256

转载 26、基于UDP的服务器端和客户端

前面的文章中我们给出了几个 TCP 的例子,对于 UDP 而言,只要能理解前面的内容,实现并非难事。UDP中的服务器端和客户端没有连接UDP 不像 TCP,无需在连接状态下交换数据,因此基于 UDP 的服务器端和客户端也无需经过连接过程。也就是说,不必调用 listen() 和 accept() 函数。UDP 中只有创建套接字的过程和数据交换的过程。UDP服务器端和客户端均只需1个套接...

2019-09-04 17:24:44 243 1

转载 25、再谈UDP和TCP

TCP 是面向连接的传输协议,建立连接时要经过三次握手,断开连接时要经过四次握手,中间传输数据时也要回复 ACK 包确认,多种机制保证了数据能够正确到达,不会丢失或出错。UDP 是非连接的传输协议,没有建立连接和断开连接的过程,它只是简单地把数据丢到网络中,也不需要 ACK 包确认。UDP 传输数据就好像我们邮寄包裹,邮寄前需要填好寄件人和收件人地址,之后送到快递公司即可,但包裹是否正确送达、...

2019-09-04 17:08:47 193

转载 24、在socket编程中使用域名

客户端中直接使用 IP 地址会有很大的弊端,一旦 IP 地址变化(IP 地址会经常变动),客户端软件就会出现错误。而使用域名会方便很多,注册后的域名只要每年续费就永远属于自己的,更换 IP 地址时修改域名解析即可,不会影响软件的正常使用。关于域名注册、域名解析、host 文件、DNS服务器等本节并未详细讲解,请读者自行脑补。本节重点讲解如何使用域名。通过域名获取IP地址域名仅仅是 IP...

2019-09-04 16:57:30 1798

转载 23、网络数据的大小端问题

不同 CPU 中,4 字节整数 1 在内存空间的存储方式是不同的。4 字节整数 1 可用 2 进制表示如下:00000000 00000000 00000000 00000001有些 CPU 以上面的顺序存储到内存,另外一些 CPU 则以倒序存储,如下所示:00000001 00000000 00000000 00000000若不考虑这些就收发数据会发生问题,因为保存顺序的不同意味...

2019-09-04 16:46:30 439

转载 22、socket编程实现文件传输功能

这节我们来完成socket文件传输程序,这是一个非常实用的例子。要实现的功能为:client 从 server下载一个文件并保存到本地。编写这个程序需要注意两个问题:(1)文件大小不确定,有可能比缓冲区大很多,调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇到同样的情况。要解决这个问题,可以使用 while 循环,例如://server代码ch...

2019-09-04 15:56:09 1260 1

转载 1、Linux文件I/O操作

1 概念首先让我们看一下,什么是文件I/O:所谓文件I/O就是输入/输出。文件IO的意思就是读写文件。文件操作的一般步骤:在Linux中要操作一个文件,一般是先open打开一个文件,得到文件描述符,然后对文件进行读写操作(或其他操作),最后是close关闭文件即可。 强调一点:我们对文件进行操作时,一定要先打开文件,打开成功之后才能操作,如果打开失败,就不用进行后边的操作了,...

2019-09-03 19:40:10 1087 1

转载 0、git入门篇shell

在计算机科学中,Shell俗称壳,用来区别于Kernel(核),是指“提供使用者使用界面”的软件(命令解析器),它类似于windows系统下的cmd.exe,它接收用户命令,然后调用相应的应用程序。例如如果你想要查看自己的ip地址,你可以输入win+r,打开cmd.exe,输入ipconfig,然后按下回车键,然后界面中就会显示你的ip信息。什么是bash在Linux系统中的默认的sh...

2019-09-03 10:16:52 93

转载 3、shell可执行文件之dos2unix

由于在DOS(Windows系统)下,文本文件的换行符为CRLF,而在Linux下换行符为LF,使用git进行代码管理时,git会自动进行CRLF和LF之间的转换,这个我们不用操心。而有时候,我们需要将windows下的文件上传到linux上,例如shell脚本,执行的时候有时会出现奇怪的问题,这时候,就需要安装dos2unix软件(可执行文件),centos下:yum install -y...

2019-09-03 10:06:15 381

空空如也

空空如也

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

TA关注的人

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