bash 调用方式与配置文件

在做bash环境配置时,会遇到配置应该写到哪个文件里的问题。以centos7.5为例就有/etc/profile/etc/bashrc$HOME/.bash_profile$HOME/.profile$HOME/.bashrc这么多配置文件。本文从login shell和interactive shell两个角度交叉描述各种情况下配置文件的加载情况。参考man bash

阅读全文

uriparser 解析处理URI

uriparser是一个用于解析与处理RFC3986标准URI的C语言库,这里简单记录其基本使用方式。

阅读全文

rabbitmq-c 非阻塞订阅

rabbitmq-c是一个C语言的AMQP(高级消息队列协议)客户端库,一般用于配合RabbitMQ使用。本文记录以非阻塞订阅方式使用该库的方法及注意事项。

阅读全文

libyaml 解析配置文件

本文记录在C语言环境使用libyaml库解析YAML文件的方法及相关数据结构,并进一步封装libyaml作为配置文件解析模块。

阅读全文

Linux network namespace 简单解读

一个network namespace是网络栈的一个逻辑拷贝,它包含了自有的路由表、防火墙规则和网络设备。

首先假定已经基本了解network namespace(网络命名空间)并熟悉使用iproute2工具包的ip命令操作netns。本文主要记录相关操作命令的实现逻辑,比如netns的名字是如何设定的、netns在内核中是如何存在的、用户态进程是如何与netns关联的。

阅读全文

AF_PACKET & BPF 伪造arp响应

AF_PACKET是socket的一种,用于在链路层(也就是OSI的二层)接收和发送数据包,可以让用户在用户态实现自定义的协议模型。由于该socket可以接收任何类型的链路层数据包,在这里利用其能力在用户态接收特定的arp协议包并发送响应。PF_PACKET可以看作等同于AF_PACKET,甚至在语义上更符合该场景,但linux文档中使用AF_PACKET。
BPF是一个数据包过滤器,可以关联到socket上用于过滤特定的数据包,用于在内核态将不符合需要的数据包过滤掉,减少通过socket传输到用户态的数据量,可以提升性能降低负载,其工作模式类似于状态机或称之为虚拟机。由于更新的eBPF的出现,原有的BPF现在可以称为cBPF,本文使用cBPF选择符合要求的arp数据包。

阅读全文

hiredis & libev 非阻塞模式

背景是需要从redis订阅(subscribe)消息,并且希望可以随时终止该线程并正常释放资源,因此选择hiredis的异步(Asynchronous )模式(个人更喜欢称其为非阻塞模式,因为通过event loop主动检查并触发事件的方式个人认为应该看作为同步模式),并且选择libev做event loop,这里贴一下整理的使用代码。

阅读全文

libvirt nwfilter 简单使用

nwfilter(network filter)是libvirt中的网络数据包过滤子系统,用于过滤进出虚拟机的网络流量,仅支持qemu kvm虚拟机。本文主要记录官网文档中理解稍有困难的部分,其他更多详细信息参考官网文档 libvirt: Network Filters

阅读全文

libxml2 简单使用

libxml2是一个用于XML解析的开发工具包,提供C语言接口。这里简单记录使用libxml2进行XML数据生成、解析及使用XPath语法进行节点选取的基本操作。

阅读全文

virt-install 简单使用

virt-install是一个使用libvirt库创建虚拟机或容器的命令行工具,参数比较多,这里仅记录使用该工具创建虚拟机的简单参数。

阅读全文