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

linux 0.11 内核学习 truncate.c


/*
 * 该文件主要实现的是truncate函数,该函数是释放指定i 
 * 节点在设备上占用的所有逻辑块,包括直接块、一次间
 * 接块和二次间接块
 */
/*
 *  linux/fs/truncate.c
 *
 *  (C) 1991  Linus Torvalds
 */
#include <linux/sched.h>
#include <sys/stat.h>
/* 释放一次间接块,参数int dev, int block指明一次间接块的设备号 */
static void free_ind(int dev,int block)
{
struct buffer_head * bh;
unsigned short * p;
int i;
// 如果逻辑块号为0,则返回
if (!block)
return;
// 读取一次间接块,并释放其上表明使用的所有逻辑
// 块,然后释放该一次间接块的缓冲区
if (bh=bread(dev,block)) {
p = (unsigned short *) bh->b_data;
for (i=0;i<512;i++,p++)
if (*p)
free_block(dev,*p);
brelse(bh);
}
free_block(dev,block);
}
/* 释放二次间接块,int dev, int block指明二次间接块的逻辑号 */
static void free_dind(int dev,int block)
{
struct buffer_head * bh;
unsigned short * p;
int i;
if (!block)
return;
if (bh=bread(dev,block)) 
{
p = (unsigned short *) bh->b_data;
for (i=0;i<512;i++,p++)
if (*p)
free_ind(dev,*p);
brelse(bh);
}
free_block(dev,block);
}
/* 将节点对应的文件长度截为0,并释放占用的设备空间 */
void truncate(struct m_inode * inode)
{
int i;
// 如果不是常规文件或者是目录文件,则返回
if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
return;
// 释放i 节点的7 个直接逻辑块,并将这7 个逻辑块项全置零
/*********************直接块************************/
for (i=0;i<7;i++)
if (inode->i_zone[i]) {
free_block(inode->i_dev,inode->i_zone[i]);
inode->i_zone[i]=0;
}
/*************************************************/
// 释放一次间接块
free_ind(inode->i_dev,inode->i_zone[7]);
// 释放二次间接块
free_dind(inode->i_dev,inode->i_zone[8]);
// 逻辑块项7、8 置零
inode->i_zone[7] = inode->i_zone[8] = 0;
// 文件大小置零
inode->i_size = 0;
// 置节


相关文档:

Linux系统新手学习的11点建议(转载)

随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起。这里介绍学习Linux的一些建议。
一、从基础开始:常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者 ......

linux条件变量例程

#include
#include
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *thread1(void *);
void *thread2(void *);
int i=1;
main(void)
{
pthread_t t_a;
pthread_t t_b;
pthread_create(&t_a,NULL,thread1,(void *)NULL) ......

Linux大师(古鲁,Guru)推荐什么?






<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
       在现实生活中被人们称为大师级的人物确实很少见。
Brian
Proffitt
先生就是一位全球知名、受人尊敬的
Linux
大师。此言有何根据?近日,他向我们推荐了什么?
 
   ......

Linux 内核配置

Linux内核配置办法:
1. make config
这种办法会遍历所有配置项,要求用户逐个选择Y/N/M
2. make menuconfig
这个办法是基于ncurse库编制的图形界面工具。常用
3. make xconfig
用于基于X11的图形工具
4. make gconfig
用于基于gtk+图形工具
5. make defconfig
创建一个默认的配置,生成当前的.config
6. make x ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号