易截截图软件、单文件、免安装、纯绿色、仅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 ext2 文件系统恢复被删除的文件

linux   ext2   文件系统恢复被删除的文件   
    
  发布日期:2002-08-08   
  文章内容:   
  ------------------------------------------------------------------------   
  --------   
  by   ......

Linux各发行版本 优缺点 简介


 
Linux各发行版本 优缺点 简介
来源: ChinaUnix博客  日期: 2008.01.21 13:43 (共有25条评论) 我要评论
 
Linux最早由Linus Benedict Torvalds在1991年开始编写。在这之前,Richard
Stallman创建了Free Software
Foundation(FSF)组织以及GNU项目,并不断的编写创建GNU程序(此类程序的许可方式均为 ......

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内核 lock free


//
同步问题:
对共享数据的访问,需要同步,互斥。
在中断,抢占,多CPU,多线程 环境下尤其重要。
同步分为: 阻塞同步,非阻塞同步
阻塞同步有许多实现方式了:mutex, semaphore. 阻塞同步使用不当就可能造成死锁,活锁,优先级反转。
非阻塞同步:(现在流行三种)
wait free 很难实现,思想是本线程有限步就 ......

Linux 消息重定向办法

Linux 消息重定向办法
command > filename
把标准输出重定向到一个指定文件中
command 1 > fielname
把标准输出重定向到一个指定文件中(同上)
command 2 > filename
把标准错误重定向到一个文件中
command >! filename
把标准输出重定向到一个
指定
文件中,若文件存在,则覆盖
command >&am ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号