- 博客(24)
- 收藏
- 关注
原创 linux内核——系统调用
系统调用系统调用是内核提供给用户进程与内核进行交互的一组接口,这些接口让应用程序受限的访问硬件设备,提供了创建进程并与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力。用户进程通过系统调用发出各种请求,而内核负责满足这些请求或者无法满足时返回一个错误,因此,实际上系统调用主要是为了保证系统稳定可靠,避免用户进程恣意妄为。
2014-08-15 15:52:23 795
转载 深入解析 ext2 文件系统
很久以来,就想写一篇关于ext 家族文件系统的文章,源于我刚工作的时候,曾经一不小心rm -rf,误删除了很多文件,当时真想有个数据恢复软件能帮我把数据回复了。当然学习数据恢复,首先要学习文件系统。最近工作原因,好长时间没看学习Linux kernel 相关的东西,感觉面目可憎。扯远了,开始我们的ext2 文件系统的探索之旅。 那些介绍ext2特征的套话我就不说了,任何一本靠谱的
2014-08-11 16:41:30 741
转载 我所认识的EXT2
前言:本文是笔者自己在学习文件系统中的一些体会,写出来和大家分享一下。本文首先是介绍了下文件系统的一些理论概念,然后分析了ext2文件系统的原理和部分源码。 文件系统是什么: 人们在认识一件陌生事物时一开始总是从事物的定义、作用和结构入手的。那么首先文件系统的定义是什么呢?从网上抓下来的:“文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织
2014-08-11 11:52:20 1437
转载 Python性能鸡汤,非常有效的提高性能的tips
第一部分 阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到"解析"一词, 认为Python不过是另一门脚本语言. "它肯定很慢!" 毫无疑问:Python程序没有编译型语言高效快速. 甚至Python拥护者们会告诉你Python不适合这些领域. 然而,YouTube已用Python服务于每小时4千
2014-07-15 19:54:37 982
原创 二叉查找树(binary search tree)——python实现
二叉查找树(binary search tree)顾名思义二叉查找树中每个jied
2014-07-11 21:59:32 4550
转载 TCP 的那些事儿(上)
TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查
2014-07-10 10:49:18 624
原创 Linux网络编程--单进程服务器处理多客户请求(I/O复用)
采用I/O复用可以使用单进程的服务器去处理多个客户的连接请求,而不需要为每个客户分配单独的进程或线程去专门的处理客户请求;I/O复用的模型:进程阻塞于select(),而select检测相应的描述符集,如果有就绪的描述符,则退出阻塞,然后进程判断就绪的描述符并作相应的处理;下面的例子根据前面的文章:http://blog.csdn.net/hjj414/article/detail
2014-03-28 19:04:53 1229
原创 快速排序--C语言实现、python实现
快速排序(从小到大排序):(C语言)采用三数中值分割法:选取数组的左右端点和中间点,并交换顺序使 左对于小的数组,快速排序不如插入排序好,所以设置当数组长度小于某个值的时候,使用插入排序的方法;quick_sort:void quick_sort(int *a, int n){ q_sort(a, 0, n-1);}q_sort:#define CUT
2014-03-27 11:59:09 1053
原创 linux网络编程--服务器客户端(TCP实现)
linux下的一个服务器客户端的小程序,基于TCP的实现;服务器可以同时接受多个客户的接入,通过子进程处理客户请求,下面的例子中,服务器只将客户的IP和端口以及发送的信息显示,然后原样的将客户发送的信息发送给客户。客户端仅仅是输入信息以及显示收到的信息。TCP通信的模式如下图,比较固定,对着图编代码就可以了:服务器的main函数:int main(int argc, cha
2014-03-20 21:14:09 1618
原创 linux内核中的likely()和unlikely()宏
在linux内核代码中经常看到likely()和unlikely()这两个宏,其定义如下:# define likely(x) __builtin_expect(!!(x), 1)# define unlikely(x) __builtin_expect(!!(x), 0)其中__builtin_expect()函数是gcc提供的用于对分支语句进行优化,其原型如下:lon
2014-02-15 15:32:17 998
转载 VirtualBox虚拟机使用技巧
本文转自:http://www.cnblogs.com/zhcncn/archive/2013/03/08/2949569.html1. 如何将别人做好的镜像拿到自己的虚拟机上使用.将已安装好的虚拟系统镜像 XXX.vdi文件copy到本地. 打开Virtual Box管理器.选择"新建"->Next->输入虚拟电脑的名称,该名称将会在Virtual Box
2014-01-03 15:56:02 1494
原创 Josephu问题链表方法
Josephu问题:编号为0到N-1的N个人围成一圈,然后从1开始报数,报到M的那个人被杀掉,剩下的人接着从1开始报数,求最后的幸存者编号。前面给出了该问题的数学解法,下面贴上链表方法,直接模拟整个过程。#include #include struct node { int num; struct node *next;};typedef struct node
2013-12-22 21:33:20 884
转载 Linus:利用二级指针删除单向链表
本文转自 酷壳 – CoolShell.cn 作者:LeoLinus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding。下面是Linus的教学原文及翻译——“At the opposite end of the spectrum
2013-12-22 18:00:24 1600
原创 Josephu问题的数学解法
今天重新做了次Josephu问题,之前做的是使用链表来实现的,直接模拟了整个过程,这次使用了数学解法。Josephu问题:编号为0到N-1的N个人围成一圈,然后从1开始报数,报到M的那个人被杀掉,剩下的人接着从1开始报数,求最后的幸存者编号。首先对于对于第一轮:0, 1, 2, ......, M-2, M-1, M, M+1, ......N-2, N-1 -----------
2013-12-21 21:40:33 1749
原创 const 限定符常用总结
由于const限定符既可以放在变量类型的前面,也可以放在变量类型的后面,所以对const的用法一直都不太明了,以下是查阅资料做了个简单总结:1. 定义const对象const最简单的使用就是将一个对象转换成一个常量,如下: const int i = 10;定义i为常量并初始化为10;此时i虽然是个左值,但其值不可修改;正因为常量在定以后不可修改,所以在定义的时候必须对其进行初始化
2013-12-18 11:34:24 965 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人