• 大小: 1.81MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-02
  • 语言: 其他
  • 标签: shell  课程设计  Linux  

资源简介

实现一个简单的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

评论

共有 条评论