易截截图软件、单文件、免安装、纯绿色、仅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和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环境, ......

XP/LINUX双系统如何正常卸载LINUX

原来由于学习工作的需要,在XP下装了LINUX系统,安装XP/LINUX双系统麻烦,没想到卸载也麻烦。刚开始以为把装LINUX系统的那个盘格式化就OK了,结果重启后仍然出现那个可恨的grub引导界面。一气之下,重装C盘,grub界面没了,可却进不了系统。网上多方查找,最后解决办法:下载mbrfix文件到u盘,用系统盘进入到WINPE,将mbrfi ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号