自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

alenliu's blog

业精于勤,荒于嬉;行成于思,毁于随。

原创 解决 CentOS6.5 虚拟机复制后网卡编号不正确的问题

今天在使用 VirtualBox 复制一个 CentOS6.5 虚拟机后,发现复制后的虚拟机网卡的命名不是从 eth0开始。比如之前的虚拟机4个网卡名称是eth0-eth3,但是复制后的虚拟机4个网卡名称是eth4-eth7,而且还跟 VirtualBox 中配置的网卡顺序不一致。起始很早之前就注...

2020-01-07 14:32:18

阅读数 45

评论数 0

原创 nginx 源码分析:http 模块解析 listen 配置

http 模块解析 listen 配置 在 启动流程 这篇文章中,我提到 ngx_init_cycle 函数最后会调用 ngx_open_listening_sockets 函数打开所有监听的端口,会创建所有的 listening socket 。实际上,nginx 将需要创建的 listeni...

2019-11-16 22:50:18

阅读数 38

评论数 0

原创 nginx 源码分析:http 模块配置解析流程

配置解析流程 将 nginx 作为一个静态 web 服务器的最简单配置文件如下: events { } http { server { listen 80; location / { } } } ...

2019-11-16 12:45:15

阅读数 48

评论数 0

原创 nginx 源码分析:升级流程

升级流程 当要升级 nginx 到更高的版本时,为了不中断业务,nginx 提供了热升级功能,升级的操作步骤如下: # 给旧的 master 进程发送 USR2 信号命令它执行升级流程,即用新的二进制程序创建新的 nginx 进程 kill -USR2 `cat /usr/local/ngi...

2019-11-03 12:18:46

阅读数 49

评论数 0

原创 nginx 源码分析:配置热更新流程

配置热更新流程 当修改了 nginx 的配置文件时,执行 nginx -s reload 命令就可以使新的配置生效(业务不会中断),而不需要关闭当前的进程再重新启动。这就是所谓的配置热更新。这一节让我们看看 nginx 是如何实现配置热更新的。 先看看执行 nginx -s reload 命令...

2019-10-27 21:55:25

阅读数 127

评论数 0

原创 nginx 源码分析:启动流程

nginx 启动流程 启动流程假设 nginx 以一个 master 多个 worker 进程的方式工作。 main nginx 进程启动时先执行 main 函数(src/core/nginx.c 中),main 函数先做一些基本的工作,比如处理命令行参数,初始化系统时间,初始化 error...

2019-10-27 16:50:08

阅读数 67

评论数 0

原创 Lua 程序设计:从 Lua 中调用 C 函数

从 Lua 中调用 C 函数 扩展 Lua 的一项基本含义就是,应用程序可以注册新的 C 函数到 Lua 中。 当我们说 Lua 能够调用 C 函数,并不是意味着 Lua 能够调用任意的 C 函数。在上一章中,我们说过当从 C 语言中调用 Lua 函数时,必须遵循一个简单的协议向 Lua 传...

2019-09-21 18:08:53

阅读数 61

评论数 0

原创 Lua 程序设计:扩展应用程序

扩展应用程序 Lua 的一项重要用途是作为一种配置语言(configuration language )。本章将介绍如何用 Lua 来配置一个程序。将从一个简单的例子开始,逐步地扩展它,使其完成更复杂的任务。 基础 作为我们的第一个任务,让我们假设一个简单的场景:你的 C 程序有一个窗口,你...

2019-09-16 23:34:01

阅读数 62

评论数 0

原创 Lua 程序设计:C API 概述

C API 概述 Lua 是一种嵌入式语言,即 Lua 不是一个单独运行的程序,而是一个可以嵌入到其他程序的库,通过链接就可以将 Lua 的功能合并到这些程序。 Lua 使用解释器来执行 Lua 程序,解释器是一个简单的应用程序,它依靠 Lua 库来实现主要功能。这种使用一个库来扩展应用程序的...

2019-09-15 17:35:23

阅读数 75

评论数 0

原创 Lua 程序设计:模块与包

模块与包 从用户观点看,一个模块就是一些代码(Lua 或 C 代码),可以使用 require 函数加载这些代码,然后创建并返回一个 table 。这个 table 就是一个名称空间(namespace),其中包含模块导出的所有东西,比如函数和常量。 例如,所有的标准库都是模块。可以以如下的方...

2019-09-09 23:34:37

阅读数 69

评论数 0

原创 Lua 程序设计:环境

环境 Lua 将所有的全局变量保存在一个常规的 table 中,这个 table 称为环境。Lua 将环境 table 自身保存在一个全局变量 _G 中(_G._G 等于 _G)。例如,使用以下代码就可以打印当前环境中所有全局变量的名称: for n in pairs(_G) do print(n...

2019-09-08 17:38:18

阅读数 71

评论数 0

原创 Lua 程序设计:元表和元方法

元表与元方法 通常,Lua 中的每个值都有一套预定义的操作集合。例如,可以将数字相加,可以连接字符串,还可以在 table 中插入一对 key-value 等。但是我们无法将两个 table 相加,无法对函数做比较,也无法调用一个字符串。 但是我们可以通过元表来修改一个值的行为,使其执行一个非...

2019-09-08 15:29:31

阅读数 72

评论数 0

原创 C语言使用 gzip 算法压缩数据

前言 在实际工作场景中,为了节省网络带宽,经常需要将大的数据压缩后传输。gzip 是一种很常见的数据压缩算法,本文给出C语言程序实例,介绍如何使用 zlib 库中的 gzip 算法压缩数据。 代码 test_zlib.c 代码如下: #include <stdio.h> #includ...

2019-09-03 18:31:28

阅读数 256

评论数 0

原创 Lua 程序设计:协程

前言 一个协程(coroutine)与线程(thread,这里指“多线程”中的线程)类似:它是一个执行序列,拥有自己的栈,局部变量,指令指针,但是与其他的协程共享全局变量和其他大部分东西。 从概念上讲,协程与线程最大的区别是:在一个多处理器机器上,一个多线程程序可以并行地执行多个线程。而协程是...

2019-08-18 16:40:36

阅读数 87

评论数 0

原创 《Lua 5.1 Reference Manual》重点

《Lua 5.1 Reference Manual》重点,方便自己查阅~

2019-07-20 20:09:52

阅读数 125

评论数 0

原创 cJSON库的安装与使用

介绍 sJSON 库是C语言中的最常用的 JSON 库。github 地址是 https://github.com/DaveGamble/cJSON 。 安装 环境是 Ubuntu 16.04。需要先安装cmake。 cJSON 库安装步骤如下: git clone https://gi...

2019-07-01 12:15:31

阅读数 1283

评论数 0

原创 JSON 格式

JSON (JavaScript Object Notation) 是一个轻量级的数据交换格式。这种格式易于人们阅读和书写,也易于计算机解析和生成。 JSON 由两种结构组成: 一种是由多对 名字 / 值 组成的集合。在各种编程语言中,也被称为对象,纪录,结构,字典,哈希表, 关联数组。 ...

2019-07-01 01:51:59

阅读数 3394

评论数 0

原创 WebSocket 协议简介

为什么需要WebSocket 协议? 总所周知,HTTP 协议是一个遵循请求-响应模式的协议。这种模式有两个特点:1. 由客户端先发起请求,然后等待服务器的响应。2. 服务器不能在没有接收到客户端请求时,就发送数据。也就是说,客户端和服务器之间的通信是单向的。 在某些应用中,通常有服务器向客户...

2019-06-23 23:26:54

阅读数 148

评论数 0

原创 介绍 VMware 中的网络

Bridged 网络 Bridged 网络 就是我们通常说的桥接网络。使用这种网络方式,就相当于使用一台 VMware 创建的虚拟交换机 VMnet0 将虚拟机中的网口和宿主机中的网口连接起来,这样就将虚拟机加入到宿主机所在的局域网中。如果使用的是无线网络,那么虚拟机中的网口就会自动获取到一个I...

2019-06-23 17:38:08

阅读数 285

评论数 0

原创 kubernetes 坑人的错误!!!Unable to connect to the server: x509: certificate signed by unknown authority

说明 尼玛,今晚在虚拟机搭建 kubernetes 集群环境时,遇到一个破问题,我花费了近4个小时才解决!!!,现记录下这个问题如何出现以及如何解决,避免后人踩坑!!! 环境 ubuntu 16.04 虚拟机 docker 18.09.1 kubernetes 1.14.3 问...

2019-06-22 00:15:37

阅读数 3794

评论数 3

原创 快速构建自己的 docker Ubuntu 镜像

说明 本文介绍如何构建一个包含常用的命令的 docker ubuntu镜像,镜像启动时运行nginx(使用的nginx是自己编译的版本)提供web服务。 创建目录 创建一个编译镜像的目录 build,复制本地的nginx文件夹到新目录。 mkdir build cd build cp ...

2019-06-16 20:38:44

阅读数 521

评论数 0

原创 Ubuntu16.04 rc.local不生效,启动过程中报“Failed to start /etc/rc.local Compatibility”错误

使用Ubuntu16.04时,发现有时候启动脚本/etc/rc.local中的命令不生效,随即发现在这种情况下系统启动时会打印 Failed to start /etc/rc.local Compatibility 错误。Google了下,找到适合我的解决办法是将文件中第一行: 修改成 #!/b...

2019-06-16 00:46:41

阅读数 1589

评论数 1

原创 Python TCP socket 编程:send 返回 Broken pipe 错误?

在 socket 编程中常遇到的错误有我之前在这篇文章中提到的 ECONNRESET 错误,还有一种错误比较少遇见就是今天我要讲的 EPIPE 错误。在调用 send 函数时发送数据时可能会出现这种错误,这时程序会抛出如下异常: socket.error: [Errno 32] Broken p...

2019-03-03 10:59:11

阅读数 1640

评论数 0

原创 终端复用工具 tmux 介绍及使用

介绍 tmux 是一个终端复用工具,简单来说就是允许你在一个屏幕中创建多个终端,如下图所示: tmux 中如下几个概念: 会话(session):tmux 管理的一些伪终端的集合。 窗口(window):在一个会话中可以创建多个窗口。当所有窗口被关闭时,会话也被关闭。 面板(pane...

2019-02-14 22:03:07

阅读数 313

评论数 0

原创 Ubuntu16.04 与 Windows10 共享 root 用户文件夹

我是一个懒人,在个人使用 Linux 时,只想使用 root 用户,不想使用普通用户再敲 sudo 命令。所以在虚拟机里使用 Linux 时,我都有一个习惯就是将文件放在 /root 文件夹下,然后通过 Samba 与 Windows 共享文件。 在 这篇文章 中,我曾介绍了如何在最小化版本的C...

2019-01-19 15:23:52

阅读数 404

评论数 0

原创 个人常用的 awk 命令

1. 格式化某些 /proc 文件输出 linux下有些/proc文件的输出内容确实没法看,比如/proc/net/snmp的输出如下: [root@localhost ~]# cat /proc/net/snmp Ip: Forwarding DefaultTTL InReceives ...

2019-01-16 22:15:38

阅读数 338

评论数 0

原创 Python epoll 服务端编程

在《UNIX网络编程 卷1》这一节 中,我们曾用epoll实现了一个TCP回显服务器程序。现在我们用Python来实现同样的功能,代码如下: # -*- coding: utf-8 -*- import os import socket import select s = socke...

2018-11-25 14:57:30

阅读数 281

评论数 0

原创 Python 的标准输出作为管道输入出现 Broken pipe 错误?

今天写python2程序遇到一个问题,为说明这个问题,写一个演示程序,它的代码如下: import sys for line in sys.stdin: print line.strip('\n') 该演示程序的功能就是从标准输入读取内容输出到标准输出,...

2018-11-11 16:33:47

阅读数 3651

评论数 0

原创 Mac OS 修改默认复制、粘贴等快捷键

之前我一直用Windows或Linux,后来新工作使用Mac OS,感觉还是有很多不习惯的地方。特别是一些常用的快捷键,比如复制、粘贴等快捷键,在Windows下是使用ctrl键,而在Mac OS下是使用command键。而且我还使用Windows虚拟机,经常需要来回切换快捷键

2018-10-22 11:05:05

阅读数 11741

评论数 2

原创 简单几步完全关闭Win10自动更新

Win10的自动更新功能实在太逆天了,几个月前我花了两天时间搜索如何干掉它,网上也搜索了一些教程(大部分是删除文件夹,停止服务什么的),发现并没有什么卵用。不得不再次吐槽下网上各种质量低劣的千篇一律的无用文章。后来在微博上看到一个网友的评论说可以修改文件夹权限,按这个思路自己摸索了下,发现的确可行...

2018-10-20 11:55:50

阅读数 2575

评论数 0

原创 Python TCP socket 编程:recv 或 send 返回 ECONNRESET?

1. recv 返回 ECONNRESET 客户端代码: import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1'...

2018-10-19 22:52:49

阅读数 885

评论数 0

原创 Perl 语言学习笔记

前言 这几天学习了Perl语言,为了在以后看不懂语法时方便快速查询,花了一下午时间整理下Perl语言关键的语法。我实在没有兴趣去深究这门语言

2018-10-13 17:36:31

阅读数 404

评论数 0

原创 vi 编辑文本常用快捷键

说明 我主要使用vi查看或编辑位于远程主机上的文本,而不是用来写代码,所以只使用最基本的快捷键。 在处理普通文本时,我们只需要使用到vim的两种模式: 正常模式:vi启动后就是正常模式,该模式下可以使用快捷键,或按’:’键输入命令行执行。 插入模式:在正常模式下,按’i‘、’o...

2018-07-05 23:55:36

阅读数 968

评论数 0

原创 Sublime Text 3 配置 python 开发环境

基本环境 win10 64位系统版本 python安装路径:D:\Program Files (x86)\Python 下载安装sublime text 3 先进入官网下载sublime text 3 界面如下: 安装Package Contr...

2018-06-23 21:51:18

阅读数 6023

评论数 2

原创 pip 安装 pycrypto 报错:Microsoft Visual C++ 14.0 is required. 的解决办法

环境:Win10 64位,Python版本 3.6 在CMD命令行用 pip.exe install pycrypto 安装PyCrypto模块时报错: error: Microsoft Visual C++ 14.0 is required. Get it with "Micros...

2018-04-12 00:36:11

阅读数 23831

评论数 9

原创 《TCP/IP详解 卷2》 笔记:TCP的定时器

TCP为每条连接建立了七个定时器。按照它们在一条连接生存期内出现的次序,简要介绍如下。    1. “连接建立(connection establishment)”定时器在发送SYN报文段建立一条新连接时启动。如果没有在75秒内收到响应,连接建立将中止。    2. “重传(retransmiss...

2018-03-22 11:51:37

阅读数 1076

评论数 0

原创 《TCP/IP详解 卷2》 笔记:TCP的输入函数:tcp_input

TCP输入处理是系统中最长的一部分代码,tcp_input函数约有1100行代码(预警!)。它完全遵循RFC793中定义的输入事件处理步骤,这些步骤详细定义了如何根据连接的当前状态,处理不同的输入报文段。当发现分组IP首部中的协议字段是TCP协议时,IP协议的软中断处理函数ipintr调用tcp_...

2018-03-21 17:15:06

阅读数 1466

评论数 0

原创 《TCP/IP详解 卷2》 笔记:TCP的输出函数:tcp_output

tcp_output函数负责发送TCP报文段,代码中有很多地方都调用了它。    tcp_usrreq函数在多种请求处理中调用了它:处理PRU_CONNECT,发送初始SYN;处理PRU_SHUTDOWN,发送FIN;处理PRU_RCVD,应用进程从socket接收缓冲区中读取若干数据后可能需要发...

2018-03-20 14:51:12

阅读数 1591

评论数 0

原创 《TCP/IP详解 卷2》 笔记: shutdown和close系统调用

shutdown系统调用关闭socket的读通道、写通道或读写通道(由how参数决定,how参数是FREAD和FWRITE的组合)。对于读通道,shutdown丢弃所有进程还没有读走的数据以及调用shutdown之后到达的数据。对于写通道,shutdown使协议作相应的处理。对于TCP,所有剩余的...

2018-03-17 21:56:18

阅读数 749

评论数 2

原创 《TCP/IP详解 卷2》 笔记: read和write系统调用

read系统调用我们再熟悉不过了,下面列出与read系统调用相关的读系统调用:#include &lt;unistd.h&gt; ssize_t read(int fd, void *buf, size_t count); #include &lt;sys/uio.h&a...

2018-03-16 14:40:26

阅读数 890

评论数 0

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