资源简介
实现一个简单的shell(命令行解释器),类似于bash, csh等。本设计的主要目的在于学会如何在Unix系统下创建进程和管理进程。
代码片段和文件信息
#include “stdio.h“
#include
#include
#include
int physic[100]; //文件地址缓冲区p
int style=1; //文件的类型
char cur_dir[10]=“root“; //当前目录
struct command
{
char com[10];
}cmd[12];
struct block
{
int n; //空闲的盘快的个数
int free[50]; //存放空闲盘快的地址
int a; //模拟盘快是否被占用
}memory[20449];
struct block_super
{
int n; //空闲的盘快的个数
int free[50]; //存放进入栈中的空闲块
int stack[50]; //存放下一组空闲盘快的地址
}super_block;
struct node //i结点信息
{
int file_style; //i结点 文件类型
int file_length; //i结点 文件长度
int file_address[100]; //i结点 文件的物理地址
} i_node[640];
struct dir //目录项信息
{
char file_name[10]; //文件名
int i_num; //文件的结点号
char dir_name[10]; //文件所在的目录
} root[640];
void format() //格式化
{
int ijk;
super_block.n=50;
for(i=0;i<50;i++) //超级块初始化
{
super_block.free[i]=i; //存放进入栈中的空闲块
super_block.stack[i]=50+i; //存放下一组的盘块
}
for(i=0;i<640;i++) //i结点信息初始化
{
for(j=0;j<100;j++)
{
i_node[i].file_address[j]=-1;//文件地址
}
i_node[i].file_length=-1; //文件长度
i_node[i].file_style=-1; //文件类型
}
for(i=0;i<640;i++) //根目录区信息初始化
{
strcpy(root[i].file_name““);
root[i].i_num=-1;
strcpy(root[i].dir_name““);
}
for(i=0;i<20449;i++) //存储空间初始化
{
memory[i].n=0; //必须有这个
memory[i].a=0;
for(j=0;j<50;j++)
{
memory[i].free[j]=-1;
}
}
for(i=0;i<20449;i++) //将空闲块的信息用成组链接的方法写进每组的最后一个块中
{ //存储空间初始化
if((i+1)%50==0)
{
k=i+1;
for(j=0;j<50;j++)
{
if(k<20450)
{
memory[i].free[j]=k;//下一组空闲地址
memory[i].n++; //下一组空闲个数 注意在memory[i].n++之前要给其赋初值
k++;
}
else
{
memory[i].free[j]=-1;
}
}
memory[i].a=0; //标记为没有使用
continue; //处理完用于存储下一组盘块信息的特殊盘块后,跳过本次循环
}
for(j=0;j<50;j++)
{
memory[i].free[j]=-1;
}
memory[i].n=0;
}
printf(“已经初始化完毕\n“);
printf(“进入Linux文件模拟............\n\n“);}
void write_file(FILE *fp) //将信息读入系统文件中
{
int i;
fp=fopen(“system““wb“);
for(i=0;i<20449;i++)
{
fwrite(&memory[i]sizeof(struct block)1fp);
}
fwrite(&super_blocksizeof(struct block_super)1fp);
for(i=0;i<640;i++)
{
fwrite(&i_node[i]sizeof(struct node)1fp);
}
for(i=0;i<640;i++)
{
fwrite(&root[i]sizeof(struct dir)1fp);
}
fclose(fp);
}
void read_file(FILE *fp) //读出系统文件的信息
{
int i;
fp=fopen(“system““rb“);
for(i=0;i<20449;i++)
{
fread(&memory[i]sizeof(struct block)1fp);
}
fread(&super_blocksizeof(struct block_super)1fp);
for(i=0;i<640;i++)
{
fread(&i_node[i]sizeof(struct node)1fp);
}
for(i=0;i<640;i++)
{
fread(&root[i]sizeof(struct dir)1fp);
}
fclose(fp);
}
void callback(int length) //回收磁盘空间
{
int ijkmq=0;
for(i=length-1;i>=0;i--)
{
k=physic[i]; //需要提供要回收的文件的地址
m=49-super_block.n; //回收到栈中的哪个位置
if(super_block.n==50) //注意 当super_block.n==50时 m=-1;的值
{ //super_blo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-26 21:19 实现一个简单的shell(命令行解释器),类似于bash csh等。\
目录 0 2018-01-11 19:34 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\
文件 13119 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\150521305wangmeng.cpp
文件 3533 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\150521305wangmeng.dsp
文件 542 2018-01-11 19:34 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\150521305wangmeng.dsw
文件 33792 2018-01-11 19:34 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\150521305wangmeng.ncb
文件 48640 2018-01-11 19:34 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\150521305wangmeng.opt
文件 809 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\150521305wangmeng.plg
目录 0 2018-01-11 19:34 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\
文件 213053 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\150521305wangmeng.exe
文件 211216 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\150521305wangmeng.ilk
文件 33666 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\150521305wangmeng.obj
文件 227868 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\150521305wangmeng.pch
文件 394240 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\150521305wangmeng.pdb
文件 33792 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\vc60.idb
文件 45056 2018-01-11 19:33 实现一个简单的shell(命令行解释器),类似于bash csh等。\Linux文件系统\Debug\vc60.pdb
文件 2159104 2018-12-26 21:19 实现一个简单的shell(命令行解释器),类似于bash csh等。\报告.doc
- 上一篇:个人嗅探器
- 下一篇:基于SpringCloud-微服务系统设计方案
相关资源
- 数据库课程设计 教师管理系统
- 向Linux内核增加一个系统调用
- Linux操作系统管理课程设计
- 基于UML建模的课程设计——毕业设计
- Linux系统编程中文版.pdf
- 基于单片机的智能台灯设计
- Linux环境下OPC服务端&客户端
- 地图学课程设计以及模版
- 数据库课程设计--教材科管理系统
- privateshell_中文版.exe
- Linux服务器性能调整
- 单片机课程设计---作息时间控制器
- Interprocess.Communications.in.Linux.The.Nooks
- petalinux编译uboot、kernel、rootfs方法
- openssl-1.0.1e-57.el6.x86_64.rpm
- shell 编程手册
- zeromq-2.1.7.tar.gz
- 多路数字抢答器 课程设计
- verilog课程设计 指纹生成器
- 《Linux+C编程从初学到精通》源码和实
- 校园导航系统课程设计
- Linux运维入门到高级全套
- 数据库 考勤管理系统
- CA6140机床 法兰盘课程设计
- 8145v改华为界面补shell
- 计算机网络课程设计 WireShark网络抓包
- 数据结构课程设计——算数表达式求
- Tiny6410流水灯——在已经启动的ARM L
- 网络工程课程设计报告
- 老男孩linux讲义
评论
共有 条评论