自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zyfforlinux

专注linux内核,系统编程,C++服务器端编程,golang ,python/bash脚本编程,DevOps,分布式

  • 博客(130)
  • 资源 (2)
  • 收藏
  • 关注

原创 go example之旅(中)

Introduce这是来自于go by example的例子,花了几天的时间写完了这些例子,感觉对我的帮助很大,对于初学者来说,我的建议还是先找本go的书从头到尾看一下,然后再来看这些例子,每个例子都手敲一遍,对你的帮助还是很大的。在敲这些例子的过程中,有一些疑问,也有一些知识的扩充,因此总结了本文。Interface神器接口是什么?,说白了就是一堆方法的集合。C++没有接口,但是可以通过纯虚函数来

2016-07-02 11:41:11 987

原创 go example之旅(上)

Introduce这是来自于go by example的例子,花了几天的时间写完了这些例子,感觉对我的帮助很大,对于初学者来说,我的建议还是先找本go的书从头到尾看一下,然后再来看这些例子,每个例子都手敲一遍,对你的帮助还是很大的。在敲这些例子的过程中,有一些疑问,也有一些知识的扩充,因此总结了本文。你不知道的打印输出在go中fmt包功能很强大,里面提供了Print,Println等打印方法,支持类

2016-06-26 16:59:20 1173

原创 C++惯用法之SFINAE

SFINAE惯用法是什么?在谈SFINAE之前我们先来看一段代码,一切从这段代码开始。template <typename T>void show(typename T::iterator x, typename T::iterator y){ for (; x != y; ++x) cout << *x << endl;}int main(){ show<int>(16,

2016-06-21 20:17:10 2760 1

原创 文件系统与文件属性

系统编程概念与文件属性 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。系统编程概念什么是udev机制?我们都知道在Linux中一

2016-05-27 14:52:50 3536

原创 系统和进程信息与文件IO缓冲

系统和进程信息与文件IO缓冲 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此 对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。如何自定义procfs条目?procfs其实是一种

2016-05-25 11:20:20 798

原创 时间与系统限制

时间与系统限制时间 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。时间有哪些类型?对于一个程序来说,主要关注下面两种时间类型:

2016-05-24 10:40:47 1182

原创 用户和组与进程凭证

用户和组与进程凭证 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。用户和组每个用户都拥有一个唯一的用户名和一个与之相关联的数值型

2016-05-22 09:45:53 2442

原创 进程概述和内存分配

进程概述和内存分配 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。进程一个进程的内存布局是什么样的?每个进程所所分配的内存由很多

2016-05-16 11:15:50 9802

原创 文件I/O与系统编程

文件IO与系统编程 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。系统编程概览如何确定glibc的版本?可以分为下面两种方式:

2016-05-12 11:33:23 5989 2

原创 C和C++混合编程FAQ

C和C++混合编程FAQ如何在C++中调用C函数?仅仅只需要在你的C++代码中将要调用的C函数使用extern进行声明即可,代码如下://C++ codeextern "C" void f(int); //方式一extern "C" { //方式二 int g(double); double h();}void code(int i,double

2016-04-25 22:00:52 720

原创 Socket-Programing-FAQ

引言Socket编程FAQ,由Vic Metcalfs创建,这是一系列关于socket编程相关的常问的问题。这些问题整理自comp.unix.programmer新闻组,我省略了其中一些比较基本的socket编程问题,有的问题的解答已经过时,因此我更新了部分回答。How can I tell when a socket is closed on the end?如果对端调用close或者exit退出

2016-04-23 20:32:41 3649

原创 <<Effective C++>读书笔记(四)

条款41 了解隐式接口和编译期多态模板编程是一种隐式接口编译期多态技术,class则是显示接口,运行时多态对于class而言接口是显示的,以函数签名为中心,多态则是通过virtual函数发生在运行期。对于template而言,接口是隐式的,多态通过template具现化和函数重载解析发生在编译器条款42 了解typename的双重意义在模板中class和typename关键字没有区别,模板内的

2016-04-12 19:52:38 553

原创 <<Effective C++>>读书笔记(三)

条款27 尽量少做转型动作C++ 中提供的四种新式转型1.const_cast<T> (expression)2.dynamic_cast<T> (expression)3.reinterpret_cast<T> (expression)4.static_cast<T> (expression)const_cast通常被用来将对象的常量性转除.dynamic_cast 主要用来执行安全向下

2016-03-19 21:04:21 754 1

原创 深入理解docker的link机制

什么是docker的link机制同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip,后者的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信。通过docker的link机制可以通过一个name来和另一个容器

2016-03-18 10:53:44 19271 1

原创 <<Effective C++>>读书笔记(二)

条款13 以对象管理资源把资源放进对象内,便可以依赖C++的析构函数自动调用机制,确保资源被释放.两个步骤: * 获得资源后立刻放进管理对象 * 管理对象运用析构函数确保资源被释放这种以对象管理资源的观念被资源获得世纪便是初始化时机也就是所谓的RAII机制.可以为资源专门创建一个类来管理,也可以把资源交由一些智能指针来管理.下面是一个使用RAII机制管理的互斥锁资源:#ifndef LIB_MU

2016-03-14 20:58:13 522

原创 可重入、线程安全和异步信号安全

什么是可重入?关于可重入和不可重入这些概念网上可以找到很多,本人表达能力欠佳,所以在此处引用别人的话对这两个概念做一个简单的介绍: 在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数. 如果在这种情况下不会出现问题,比如说数据或状态不会被破坏,行为确定。那么这个函数就被称做”可重入”的.函数是可重入(reentrant)的,是指对

2016-03-05 15:30:04 1332

原创 Makefile笔记

入门Makefile的核心和主线是下面这条规则target: prerequisties commandtarget是个目标,是要生成的文件,也可以只是单纯的一个名称(伪目标(后面会介绍)),prerequisties则是生成这个target所需要的文件command则是如果生成target.例子:CC=gccCFLAGS = -g -lpthreadaudit: audit_log

2016-03-04 15:10:08 812

原创 <<Effective C++>>读书笔记(一)

条款03 尽可能使用const分清顶层const和底层const的区别顶层const指的是const在*号的右边,表示指针本身是一个常量,无法修改对象本身.底层const指的是const在*号的左边,表示的则是指针所指的对象是一个常量, 无法修改其指向的对象对于内置数据类型来说const无所谓底层(基本类型没有指向某个对象的意思)的概念,引用本身不是对象所以也无所谓顶层const,只有指针

2016-03-02 21:29:59 565

原创 <<Effective TCP/IP Programming>>读书笔记

技巧1 理解基于连接和无连接协议之间的差异TCP/IP分为四层,分别是接口层/物理层/链路层-->传输层-->网络层-->应用层传输层主要就是IP层,该层提供了一个很好的高效的,不可靠的,无连接的服务,负责接收来自上层的数据包,然后封装到一个IP数据包中,并路由该数据包到正确的硬件接口上。TCP在IP层上增加了三个服务,以用来实现TCP的可靠的面向连接的服务:1.为TCP段提供了校验位,这就

2016-02-20 20:41:37 1299

原创 docker storage driver compare

docker storage driver对比aufs分为多层镜像层,一个读写层.修改存在的文件,有写延迟,需要拷贝整个文件到读写层读文件性能差,需要在多层中搜索删除一个文件,只需要在读写层放一个空白文件,镜像层文件不删除性能支持page cache,内存使用效率高 The underlying mechanics of how AUFS shares files between ima

2016-02-19 14:37:55 1803

原创 Python内部机制-PyIntObject对象

Python int对象的实现Python内部关于int对象的实现在我之前的两篇文章中其实已经简单的介绍过,本文会前面的基础上更加深入的分析int对象的内部实现,以及Python对int对象进行优化而采用的缓存技术等等.首先还是来看看int对象在C层面的一个数据结构吧.typedef struct { PyObject_HEAD lo

2016-02-15 10:46:18 3606

原创 Python内部机制-PyTypeObject对象

PyTypeObject对象不知道你还否还记得在我的上一篇文章中关于PyObject中的ob_type成员,在上篇文章中我没有对它进行展开,只是告诉读者这是用来指明当前对象是何种类型以及一些类型相关的信息.那么本篇博文则是单独把ob_type拿出来分析,通过查看PyObject对象,你可以发现ob_type成员是一个struct _typeobject而这个数据结构在Python内部有另外一个typ

2016-01-25 16:59:20 7068 1

原创 Python内部机制-PyObject对象

PyObject对象机制的基石学过Python的人应该很清楚,Python中一切都是对象,所有的对象都有一个共同的基类,对于本篇博文来说,一切皆是对象则是探索Python的对象机制的一个入口点.我假设读者在阅读本文的时候已经下载Python(Python-2.7.11)的源码,并且已经解压进入了源码的根目录下.众所周知Python是用C实现的,C是一种OO的语言,而Python是一个OOP的语言,那

2016-01-25 12:07:11 6383 3

原创 non-local static对象初始化顺序

non-local static对象什么是non-local?,non-local这个术语其实是我在effective c++这本书中学到的术语,这个术语指的是非函数局部局部用域内的.那么non-local static对象有指的是什么呢?,其实说到static(不是指static关键字定义的对象)对象,至少可以排除那些内存是在堆中和栈中的对象了,所谓static对象指的是内存在data段和bss段

2016-01-20 17:06:19 2802 6

原创 深入理解C++输入输出流

为什么引入输入输出流?因为C++兼容C,所以C中的输入输出函数依然可以在C++中使用,但是很显然如果直接把C的那套输入输出搬到C++中肯定无法满足C++的需求,第一点也是最重要的一点那就是C中的输入输出有类型要求,只支持基本类型,很显然这是没办法满足C++的需求的,因此C++设计了易于使用的并且多种输入输出流接口统一的IO类库。并且还支持多种格式化操作。还可以自定义格式化操作。C++中总体来说有三种

2016-01-19 23:36:06 14099 2

翻译 Google Style Guides-Shell Style Guide

作者声明这篇翻译文章对我来说是有点小挑战的,因为我英语实在很烂,勉强可以看懂一些技术文档,能够猜出大概的含义,但是翻译对我来说算是一个挑战,看英文文档已经不是一天两天的事了,但是这个篇文章却是我的处女作,通读了这篇翻译后的文章,已经发现部分语句翻译的很不好,但是我没有能力纠正好,加上时间上不允许,最后我还是厚着脸皮放到了博客上,如果有幸某位读者读到我这蹩脚的翻译,希望你可以在唾骂我的同时也给出正确的

2016-01-14 14:46:46 2628

原创 深入理解C++中的字符串

深入理解C++中的字符串String一个C++ String有什么好分析的呢,或许有的读者会发出这样的疑问,起初的我也是这么觉得的,但是随着知识的积累,以及实际编程过程中,发现String类还是有很多的坑的,本文试图揭开一些我所知道的坑,但是我觉得我的能力可能无法全面的解剖,因此我把相关的文章会列出来,方便大家详细的学习,本文主要来自与我实际编程过程的一些体会,还参考了<<Effecitive C+

2016-01-05 22:59:15 1238

原创 OpenStack开发基础-AMPQ

AMPQ和rabbitmqAMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。一个应用协议的标准,好比是http协议,其实现就有很多种,什么Apache,Nginx等其中ra

2016-01-05 16:47:03 1094 1

原创 2016年想读的几本书

这是一本不单单介绍C++11的语法,更是一本谈论工程级应用实现的书籍,教你如何去利用C++11的一些新特性来封装工程级应用,我想读这本书的原因主要在于想学习如何使用C++来封装一些工程级的类,谈论C++11新特性的书籍很多,但是却鲜有书籍将C++11的一些新特性应用到工程代码中. 想读这本书的理由有两点,一点是云计算场景,另一个则是通过这本书我可以把自己学习的内核理论知识运用起来.我是一个学习内核

2016-01-05 12:04:08 671

原创 OpenStack开发基础-oslo.config

The cfg Modulecfg Module来自于OpenStack中的重要的基础组件oslo.config,通过cfg Module可以用来通过命令行或者是配置文件来配置一些options,对于每一个选项使用Opt类或者其子类来定义。首先我们来看一个定义option的例子:example1:#!/usr/bin/env python# encoding: utf-8from oslo_co

2015-12-30 15:32:43 2184

原创 Stack based vs Register based Virtual Machine Architecture

进程虚拟机简介一个虚拟机是对原生操作系统的一个高层次的抽象,目的是为了模拟物理机器,本文所谈论的是基于进程的虚拟机,而不是基于系统的虚拟机,基于系统的虚拟机可以用来在同一个平台下去运行多个不同的硬件架构的操作系统,常见的有kvm,xen,vmware等,而基于进程的虚拟机常见的有JVM,PVM(python虚拟机)等,java和python的解释器将java和python的代码编译成JVM和PVM可

2015-12-27 22:30:12 1207

原创 深入理解C++中的异常处理机制

深入理解C++中的异常处理机制异常处理增强错误恢复能力是提高代码健壮性的最有力的途径之一,C语言中采用的错误处理方法被认为是紧耦合的,函数的使用者必须在非常靠近函数调用的地方编写错误处理代码,这样会使得其变得笨拙和难以使用。C++中引入了异常处理机制,这是C++的主要特征之一,是考虑问题和处理错误的一种更好的方式。使用错误处理可以带来一些优点,如下:错误处理代码的编写不再冗长乏味,并且不再和正常的

2015-12-26 21:29:57 14779 10

原创 Linux内核原理-pid namespace

前言这几晚在看进程相关的内核原理,正好看到了pid这块,看起来不是很复杂,但是引入了pid namespace后增加了一些数据结构,看起来不是那么清晰了,参考了Linux内核架构这本书,看完后感觉还没有理解。所以就在网上找了一些文章参考,其中我发现了一篇质量相当不错的文章,为什么说质量不错呢主要是因为笔者在博文中并没有乱贴代码一桶,也没有按照常规的代码分析,而是以一种追踪溯源的方法还原了整个pid的

2015-11-19 13:31:30 6296 6

原创 网络编程最佳实践

网络编程最佳实践socket描述符的引用机制socket描述符引用机制,当父进程生成一个socket描述符然后fork一个子进程后,那么这个socket描述符的引用计数就+1了此后子进程close socket描述符只是减少引用计数并没有真正关闭描述符。如果希望真正关闭描述符需要使用shutdown函数 最佳实践:fork子进程后父进程立即close掉socket描述符connect背后机制客

2015-11-16 22:55:40 1781

原创 Linux内核模块编程-系统调用拦截

系统调用拦截本文实验基于Centos6.5 内核版本2.6.32-431.el6.x86_64,系统调用拦截的目的其实就是把系统真正要执行的系统调用替换为我们自己写的内核函数。系统调用拦截的实现那么如何去实现系统调用拦截呢,通过学习系统调用的内核实现我们发现其实系统调用的地址是放在sys_call_table中通过系统调用号定位到具体的系统调用地址,然后开始调用,那么通过编写内核模块来修改sys_c

2015-11-16 22:15:48 4604

原创 Linux内核模块编程-与设备文件对话

与设备文件对话在上一篇博文中,我们编写了一个字符设备驱动,简单的回顾下我们编写的流程:实现open/close/read/write四个操作设备文件的函数填充file_operations结构体注册设备和指明操作设备的file_operations与设备之间可以通过上面提到的几个函数来进行通信,但是对于某些设备来说,设备的操作且无法通过上面提到的几个函数来实现 ioctl的一些简介: i

2015-11-15 16:39:41 1141

原创 Linux内核模块编程-proc文件系统进阶

proc作为输入关于proc的一些基本概念和基本使用以及一些核心数据结构可以参考我的上一篇文章 在上一篇文章中提到了利用proc作为内核空间传递数据给用户空间的一种方式,那么proc能否作为用户空间传递数据给内核空间的一种手法呢?答案当然是可以的,熟悉linux的读者应该都知道我们不光光可以读取proc文件中的内容还是可以向proc文件中写入要传递的数据的,那么如何通过proc来向内核输入信息呢,

2015-11-14 11:04:00 2780 3

原创 accept()ing when you can’t问题分析

accept()ing when you can’t问题在libev的官方文档中提到一个accept()ing when you can’t的问题,下面是作者对于这个问题的分析: For example, larger servers often run out of file descriptors (because of resource limits),causing accept to f

2015-11-11 23:40:49 1834

原创 内联汇编基础学习

内联汇编简介在Linux内核代码中有一部分是使用汇编语言编写的,尤其是与特定体系结构相关的代码和一些对性能影响很大的代码都是使用汇编语言进行编写的,那么GCC为了可以在C语言中来编写汇编代码,提供了内联汇编的功能,可以在C代码中直接内嵌汇编语言,大大方便了程序设计。内核汇编基本语法 __asm__ [__volatiate__]( 汇编语句模板 :输出部分

2015-11-11 23:18:52 2217

原创 Namespace机制-概述

(本文整理来自于互联网上的资料)Namespace机制概述Linux Namespaces机制提供了一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。要创建新的Namespace,只需要在调用clone时指定相应的flag。Linux Namespaces机制为实现基于容器

2015-11-11 23:10:36 1540

centos5.4 LAMP平台搭建

很好的lamp搭建教程,比较权威的 全面的哦,加入了一些优化

2013-06-30

空空如也

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

TA关注的人

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