资源简介
实现一个简单的shell(命令行解释器),类似于bash, csh等。本设计的主要目的在于学会如何在Unix系统下创建进程和管理进程。
![](http://www.nz998.com/pic/58514.jpg)
代码片段和文件信息
#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-微服务系统设计方案
相关资源
- FTP课程设计(服务端+客户端)
- uboot到linux logo显示不间断 补丁
- UNIX/LINUX编程实践教程的源码
- 高频电子线路课程设计报告收音机
- Linux任务管理器
- linux应用层的华容道游戏源代码
- 直流稳压电源的课程设计、安装及调
- EDA课程设计_密码锁
- 单片机课程设计 篮球计分器
- 数据结构课程设计 6 1 彩票系统
- 端口扫描课程设计详细的报告
- 步进电机课程设计(个人设计)
- 校园网络规划与设计课程设计
- ubuntu9.10 可加载内核模块和字符设备驱
- 编译原理课程设计:词法语法编译器
-
simuli
nk 课程设计 qpsk - 武汉理工大学 单片机课程设计 16*16点
- 数据库VFP课程设计
- 分页系统模拟实验 操作系统 课程设
- MP3文件ID3v2ID3v2APEv2标签读取
- 模拟段页式虚拟存储管理中地址转换
- 硬件课程设计—流水灯(quartus软件
- 超市收银系统eclipse access大学课程设计
- 航空订票系统_数据结构课程设计
- 操作系统实验——虚存管理实验
- c 课程设计 职工信息管理系统
- linux下的发包工具sendip
- 汇编语言,课程设计,红绿灯
- 机床液压系统课程设计卧式钻床动力
- 尚观培训linux许巍关于c 的笔记和讲义
评论
共有 条评论