<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[无忧老猪]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/crazycoder8848</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; crazycoder8848]]></copyright><item><title><![CDATA[采用隔离法消除冠状病毒传播的源码实现（C语言）]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/104224077</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/104224077</guid><author>crazycoder8848</author><pubDate>Sat, 08 Feb 2020 16:13:37 +0800</pubDate><description><![CDATA[近期针对新型冠状病毒的肆虐，我国各地都实施了严厉的疫情防控措施。
而全民大隔离可以说是对付疫情的关键手段。


身为一名小码农，本人在将自己隔离在家的日子里，脑海中很自然的就涌现出了“用隔离法终止冠状病毒传播”的代码实现。




void terminate_coronavirus_spread(void)
{
    uint64_t infected_num_last_day;
    u...]]></description><category></category></item><item><title><![CDATA[calc——一个简单的Linux命令行环境计算器]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/81639772</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/81639772</guid><author>crazycoder8848</author><pubDate>Tue, 14 Aug 2018 01:05:51 +0800</pubDate><description><![CDATA[在下整了一个开源的小程序——calc。

项目URL:

https://github.com/sunmingbao/calc

 

运行效果如下（某些运算符用引号括住，是为了避免被shell当作特殊字符处理）：

[root@localhost ~]# calc 1 + -3
-2
[root@localhost ~]# calc 1 &quot;&amp;lt;&amp;lt;&quot; 10
1024
[root@loca...]]></description><category></category></item><item><title><![CDATA[Linux内核rootfs的初始化过程]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/79177228</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/79177228</guid><author>crazycoder8848</author><pubDate>Sat, 27 Jan 2018 01:30:42 +0800</pubDate><description><![CDATA[由于在下水平相当有限，不当之处，还望大家批评指正^_^

在Linux  shell中执行mount命令，通常可以看到某个做了文件系统的磁盘分区或flash分区或内存文件系统做为所谓的根文件系统被mount到了挂载点/处。
实际上内核中最初始的根文件系统，并不是来自内核外部，他是由内核自己构建出来的。
为了说明这个过程，我们先说说mount的过程。
系统调用sys_mount是在fs/n]]></description><category></category></item><item><title><![CDATA[Linux内核的启动流程]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/76864335</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/76864335</guid><author>crazycoder8848</author><pubDate>Tue, 08 Aug 2017 02:04:26 +0800</pubDate><description><![CDATA[内核本身由一个作了raw_binary处理的目标文件（下文称为kernel.o）以及大量的在运动时可能被动态装载的内核模块构成。


关于内核映像的构成，可以参考http://blog.youkuaiyun.com/crazycoder8848/article/details/19156503
本文仅谈一谈内核的启动流程，基于3.10.102版本的内核源码。


内核的启动流程，开始于kerne]]></description><category></category></item><item><title><![CDATA[软件设计中的可移植性的考虑]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/72618090</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/72618090</guid><author>crazycoder8848</author><pubDate>Mon, 22 May 2017 00:39:41 +0800</pubDate><description><![CDATA[由于在下水平相当有限，不当之处还望大家不吝赐教。


参考Linux内核的思路，对应用程序的可移植性设计做出的思考。
Linux内核中，最前期的启动代码是特定体系结构的代码，还有中断、异常、系统调用的前期都会进入特定体系结构的框架代码，然后再转入体系结构无关的代码。
特定体系结构的代码，位于以体系结构名称命名的文件夹中。
那么对于应用程序的设计，如何借鉴呢？以GUI程序为例。
假如一]]></description><category></category></item><item><title><![CDATA[表目管理代码示例（迸发访问，多重索引查找，添加，删除，）]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/72599928</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/72599928</guid><author>crazycoder8848</author><pubDate>Sun, 21 May 2017 17:57:42 +0800</pubDate><description><![CDATA[由于在下水平相当有限，不当之处还望大家不吝赐教。


程序设计中，常常会涉及到各种各样的表目的管理。
如表目的添加，删除，查找等。
其中，查找操作，有可能需要支持多种方式，例如，根据id查找，根据某个属性查找，或者根据多个属性进行查找等。
另外，还需要妥善处理好迸发问题，又要兼顾效率。
那么要如何设计表管理模块，才能实现这些目标呢？
这里上一份代码，供大家参考。
注意，完整的可运]]></description><category></category></item><item><title><![CDATA[Linux关机重启停机(shutdown reboot halt)流程分析]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/71998012</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/71998012</guid><author>crazycoder8848</author><pubDate>Sun, 14 May 2017 17:22:43 +0800</pubDate><description><![CDATA[由于本人水平相当有限，不当之处还望大家多多指教。
涉及的内核源码，基于linux-3.10.102。
首先，对于用户态发起的这类操作请求，最终都是通过sys_reboot系统调用（源码在kernel/sys.c）实现的。
其代码如下。如其注释所言，他除了可以重启关机停机，还可以修改ctrl-alt-del组合键的含义。
另外，注释还说到此系统调用不会做sync。即sync需要用户在调用此系]]></description><category></category></item><item><title><![CDATA[关于Linux文件系统的几点注意事项]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/71915601</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/71915601</guid><author>crazycoder8848</author><pubDate>Sun, 14 May 2017 05:20:24 +0800</pubDate><description><![CDATA[本人水平相当有限，不当之处还望大家多多指教。
做内核开发的朋友，可能对下面的代码都很眼熟。

static const struct file_operations xxx_fops = {
	.owner		= THIS_MODULE,
	.llseek		= no_llseek,
	.write		= xxx_write,
	.unlocked_ioctl	= xxx_ioctl,
	.]]></description><category></category></item><item><title><![CDATA[raw binary文件探秘]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/70768684</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/70768684</guid><author>crazycoder8848</author><pubDate>Tue, 25 Apr 2017 23:57:08 +0800</pubDate><description><![CDATA[Linux下的目标文件、动态库文件、可执行文件，其格式为elf格式。
elf文件是有结构的文件，其内部有丰富的信息，例如,可能包含了可执行文件的入口地址，各个节的起始地址，可重定位信息，还可能包含指令与代码行的对应关系（用于调试）。
内核则利用elf文件中的相关信息，加载运行可执行文件。
然而内核映像，u-boot映像这些特殊的文件，则是raw_binary文件。这当然有他的原因。
以u-]]></description><category></category></item><item><title><![CDATA[超简单!!centos 6离线源码编译安装升级gcc、binutils、automake、autoconf]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/53843461</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/53843461</guid><author>crazycoder8848</author><pubDate>Fri, 23 Dec 2016 21:05:53 +0800</pubDate><description><![CDATA[centos 6系列的Linux发行版，是非常成功（具足UNIX精神）的发行版，可能大家都已经用得非常习惯了。
但问题是，其内核及附带的工具软件，版本却都非常老了。
centos 7上的软件版本虽然比较新，但centos 7设计风格的突变（主要是引入了很不符合UNIX精神的systemd），可能在业界也引起了不少争议。
而我们苦逼的开发者，可能面临既需要使用高版本的相关组件，又不想升级到ce]]></description><category></category></item><item><title><![CDATA[程序设计的兼容性问题杂谈]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/53619438</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/53619438</guid><author>crazycoder8848</author><pubDate>Wed, 14 Dec 2016 00:08:24 +0800</pubDate><description><![CDATA[程序的实现，经常会随着时间的推移不断的变化。
不断变化的实现，经常又需要兼容以前的实现。
本文试图在这方面做一些探讨。


由于在下水平相当有限，不当之处，在所难免。还望大家多多指教。


所谓兼容，指的是新版本的软件能够原封不动的接纳旧版本的配置文件、命令行参数、程序间交互消息、函数接口调用等。


下面分几个方面来探讨。


一、程序间交互消息的兼容性


这]]></description><category></category></item><item><title><![CDATA[DPDK开发杂记]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/52146138</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/52146138</guid><author>crazycoder8848</author><pubDate>Thu, 11 Aug 2016 08:08:54 +0800</pubDate><description><![CDATA[注意，本文的示例是基于Linux x86_64环境。如果你的环境不一样，应当将文中的x86_64-native-linuxapp-gcc 换成实际的值。
例如，32位linux环境，则换成i686-native-linuxapp-gcc



DPDK环境变量

编译DPDK自带的应用程序，总是需要用到两个环境变量。
可以在 ~/.bash_profile中追加如下两行内容。
这]]></description><category></category></item><item><title><![CDATA[Linux静态IP及DNS配置]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/52144188</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/52144188</guid><author>crazycoder8848</author><pubDate>Sun, 07 Aug 2016 19:05:28 +0800</pubDate><description><![CDATA[以eth0为例，下面是其配置文件示例。
主要是配置红色部分。
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:A3:48:38
TYPE=Ethernet
UUID=afeca381-c5c1-4dfe-9e8a-ec573dbd04f7
ONB]]></description><category></category></item><item><title><![CDATA[Win7操作系统调优]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/52139388</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/52139388</guid><author>crazycoder8848</author><pubDate>Sun, 07 Aug 2016 00:04:54 +0800</pubDate><description><![CDATA[对于64位win7，2G内存的配置，按照这个方法调优后，用起来性能杠杠的。
看看我的笔记本，在不开程序时某个时刻的截图。




下面直接说优化项：
关闭 防火墙（你要说这不安全，那你就开着好了）
disable不必要的开机启动项（可以通过360安全卫士完成）
停止资源占用高且不太必要的服务：windows update、windows defender、windows fire]]></description><category></category></item><item><title><![CDATA[Linux内核协议栈IP报文的上送转发及下发]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/51983366</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/51983366</guid><author>crazycoder8848</author><pubDate>Thu, 21 Jul 2016 16:29:30 +0800</pubDate><description><![CDATA[这里主要分析在网络功能简单配置，且报文正常的情况下，报文的处理过程。
网卡接收到IP报文，经过一些执行路径后，最终进入ip_rcv做处理。 
ip_rcv在网络功能简单配置，且报文正常的情况下，就是简单的通过ip_rcv_finish完成后续的全部处理工作。
ip_rcv_finish通过查找路由，为此报文找到一个dst_entry，然后即由skb_dst(skb)->input(skb);]]></description><category></category></item><item><title><![CDATA[Linux网卡驱动代码阅读杂记]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/51955940</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/51955940</guid><author>crazycoder8848</author><pubDate>Tue, 19 Jul 2016 15:47:32 +0800</pubDate><description><![CDATA[RealTek 8169/8168/8101的驱动代码，一共就一个文件（drivers/net/r8169.c），而且总代码行也就5千行左右，很适合新手入门学习。
而像intel e1000e的驱动，包含了较多的文件（总入口文件：drivers/net/e1000e/netdev.c），总代码行至少在1万行以上。


先来看看r8169的相关代码：
rtl8169_open中，用dma_]]></description><category></category></item><item><title><![CDATA[grep使用杂记]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/51885780</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/51885780</guid><author>crazycoder8848</author><pubDate>Tue, 12 Jul 2016 08:43:55 +0800</pubDate><description><![CDATA[grep有如下一些选项，
-m指定输出多少个匹配
-n则会将行号也输出
-A指定将匹配行后的多少行也输出
-B指定将匹配行前的多少行也输出


看下面的例子。输出了行号。行号后面跟':'表示是匹配行。跟'-'表示是非匹配行。
[root@localhost ~]# cat a_file.sh | grep eth1 -m 2 -n -A 3
19:echo ifconfig eth]]></description><category></category></item><item><title><![CDATA[samba服务器的配置]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/51881676</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/51881676</guid><author>crazycoder8848</author><pubDate>Mon, 11 Jul 2016 16:18:18 +0800</pubDate><description><![CDATA[1. 关闭selinux。
通过修改/etc/selinux/config实现
将  SELINUX=enforcing  改为   SELINUX=disabled


2. 关闭linux防火墙，并阻止其开机自启。
service iptables stop
chkconfig iptables off


3. 创建samba账号 root
通过如下命令，创建root账]]></description><category></category></item><item><title><![CDATA[Linux proc文件系统杂记]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/51569104</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/51569104</guid><author>crazycoder8848</author><pubDate>Thu, 02 Jun 2016 18:19:42 +0800</pubDate><description><![CDATA[一、cpu占用率相关

1. 系统总体cpu占用
/proc/stat
示例输出：
[root@test]# cat /proc/stat 
cpu  166709 34158 278899 243448347 302989 0 345 0 0 0
cpu0 84510 17883 137112 121703575 152650 0 304 0 0 0
cpu1 82199 16274 ]]></description><category></category></item><item><title><![CDATA[C程序的基础系统代码]]></title><link>https://blog.youkuaiyun.com/crazycoder8848/article/details/51543090</link><guid>https://blog.youkuaiyun.com/crazycoder8848/article/details/51543090</guid><author>crazycoder8848</author><pubDate>Tue, 31 May 2016 10:00:02 +0800</pubDate><description><![CDATA[一、简单C程序的构建过程：
[root@test]# gcc -v  hello.c 
//首先是gcc搜集系统信息
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/lto-wrapper
Target: x86_64-redhat-]]></description><category></category></item></channel></rss>