易截截图软件、单文件、免安装、纯绿色、仅160KB

linux 0.11 内核学习 block_dev.c


/*
 * 该文件的两个函数是为了向open和write函数提供接口,实现内核数据
 * 和用户数据的交互
 */
/*
 *  linux/fs/block_dev.c
 *
 *  (C) 1991  Linus Torvalds
 */
#include <errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <asm/segment.h>
#include <asm/system.h>
/*
 *    |   block1   |block 2|block 3|
 * ---|-----|------|-------|-------|-------|-------|----
 * ---|-----|------|-------|-------|-------|-------|----
 *    |<--->|<---->|------>|------>|
 *    offset  chars  chars1  chars2
 * --pos--->|<--------count------->|
 */
/* 向指定设备从给定偏移处写入指定长度字节数据,count - 要传送的字节数 */
/* dev - 设备号;pos - 设备文件中偏移量指针;buf - 用户地址空间中缓冲区地址 */
int block_write(int dev, long * pos, char * buf, int count)
{
// 对于内核来说,写操作是向高速缓冲区中写入数据,什么时候数据最终写入设备是由高速缓冲管理
// 程序决定并处理的。另外,因为设备是以块为单位进行读写的,因此对于写开始位置不处于块起始
// 处时,需要先将开始字节所在的整个块读出,然后将需要写的数据从写开始处填写满该块,再将完
// 整的一块数据写盘(即交由高速缓冲程序去处理)
// 由pos 地址换算成开始读写块的块序号block。并求出需读第1 字节在该块中的偏移位置offset
int block = *pos >> BLOCK_SIZE_BITS;
int offset = *pos & (BLOCK_SIZE-1);
int chars;
int written = 0;
struct buffer_head * bh;
register char * p;
while (count>0) {
chars = BLOCK_SIZE - offset; // 计算在该块中可写入的字节数
// 如果需要写入的字节数填不满一块,则只需写count 字节
if (chars > count)
chars=count;
// 如果正好要写1 块数据,则直接申请1 块高速缓冲块
if (chars == BLOCK_SIZE)
bh = getblk(dev,block);
// 否则需要读入将被修改的数据块,并预读
// 下两块数据,然后将块号递增1
else
bh = breada(dev,block,block+1,block+2,-1);
block++;


相关文档:

【转帖LINUX】IP分片重组分析

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
1. 前言
 
对IP碎片的重组是防火墙提高安全性的一个重要手段,通过提前进行碎片重组,可以有效防御各种碎片攻击,Linux内核的防火墙 ......

学习过程中遇到的一些linux操作tips

启动/重启/停止一个服务
/etc/init.d/program_name start
比如邮件服务器postfix可以这样: sudo /etc/init.d/postfix start
------------------------------------------------
设置程序到启动组里:
# chkconfig program_name on
比如:sudo chkconfig postfix on
----------------------------------------------- ......

linux和unix下常用解压和压缩命令


linux和unix下常用解压和压缩命令
.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.ta ......

linux与j2ee

J2ee程序员应该掌握的linux知识
开发者在线 Builder.com.cn 更新时间:2007-09-01作者:中国IT实验室 来源:中国IT实验室
本文关键词: Linux J2ee
 一般大型J2EE应用都在建构在linux环境下的。开发环境下我们可以通过samba映射成本地的网络驱动器,直接在windows环境下进行编程调试。但是最后的发布还是要到linux环境, ......

linux 0.11 内核学习 head.s


#
# 这段代码被连接到system模块的最前面,这也是它为什么称之为head.s的原因。
# 从这里开始内核完全运行在保护模式下。head.s采用的是at&t格式的
# 汇编。注意的是代码中的赋值方向是从左到右。

# 这段程序实际上是出于内存的绝对地址0开始处。首先是加载各个数据段寄存器。
# 重新设置全局描述符表g ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号