文档库 最新最全的文档下载
当前位置:文档库 › 文件目录管理与显示

文件目录管理与显示

文件目录管理与显示
文件目录管理与显示

3 文件目录管理与显示

1、题目的内容和要求

给出目录和文件信息,要求编程实现将其排列成一棵有一定缩进的树。

(1)设计文件和目录信息树的存储结构。

(2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即:

\A

\A\AA1

\A\AA1\aa1.doc

创建时要检查同一路径下不能有同名的目录或文件名。

(3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。

(4)查找指定目录和文件。

(5)添加新目录或新文件。

(6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;根目录不能删除。

(7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。

(8)对同一层次下的子目录或文件按创建时间有序输出。

选做内容:

(1)如何实现相对路径表示法。

(2)通配符的使用。如用“?”代表任意一个字符,用“*”表示任意多个多个任意字符。

2、设计

2.1设计思想

(1)数据结构设计:本体由于要对文件目录的处理,在一个文件中可以存放多个文件,所以用树,并且用孩子兄弟表示法,表示该树。

(2)算法设计:当在该目录下添加,查找,删除子目录时,相当于在该目录下对其孩子结点的处理,根据树建立和结点的孩子兄弟结点的处理来实现。

2.2设计表示

调用函数TreeInitiate(SibTree *t)

调用函数insertRoot( )

调用函数insertChild( )

2.3详细设计

编写树的建立和孩子结点的添加、删除、搜索等函数是比较简单的,关键在函数中怎么去判断是给其插入孩子结点还是兄弟结点,在删除时还要判断该目录是否有子目录或者子文件……这些都要在写程序时考虑进去,我认为这个题的难点还是在输出上,因为要按照题目要求,以凹入法输出,在输出函数中就要想到用递归法来处理该问题。

3、调试

在写的过程中,没写一个函数都进行一次调试操作,以验证函数的正确性,在写完后,曾遇到过这样的情况:给一个结点的兄弟插入孩子结点时,出现了错误插入,变成了给该结点插入孩子结点,经过一步步的调试发现少一个判断过程,来判断这个结点是不是要插入的目的结点,通过修改问题被解决。

4、用户手册

此程序在VC下运行,在运行时要按照每一步的提示的规格去进行操作

5、测试数据和结果截图

(1)初始时运行如图

(2)进行添加操作,以输入0结束

(3)进行查找操作

(4)进行删除操作

如果有子目录则不能删除或子文件

没有子目录或子文件时

(5)进行输出操作

(6)退出时输入5即可退出

6、源程序清单

(1)测试源文件test.cpp

#include

#include

#include

#include

#include

using namespace std;

#include "Sibtree.h"

void add(SibTree *t1)

{

printf("输入目录文件信息以输入0结束:\n"); SibTreeNode *r, *r1,*r2;

char ifm[1000]={'\0'},name1[50],name2[50]; char *str;

int i,j,n;

while(1)

{

cin>>ifm;

str=ifm;

if(*str=='0')break;

r=t1->root;

if (r==NULL)

{

for (i=0,str+=1;*str!='\\'&&*str!='\0';str++,i++)

{

name1[i]=*str;

}

name1[i]='\0';

if(*str=='\0')insertRoot(t1,name1);

else

printf("%s的路径不存在,不能添加\n",name1);

}

else

{

for (i=0,str+=1;*str!='\\'&&*str!='\0';str++,i++)

{

name1[i]=*str;

}

name1[i]='\0';

if(search(t1,name1)==0&&*str=='\0')

{

insertnextSibing(t1,r,name1);

}

if(search(t1,name1)==0&&*str!='\0')printf("%s的路径不存在,不能添加\n",name1);

r1=LevelOrderTraverse(t1->root,name1);

while(r1!=NULL)

{

if(*str=='\0')break;

for (i=0,str+=1;*str!='\\'&&*str!='\0';str++,i++)

{

name2[i]=*str;

}

name2[i]='\0';

if(*str=='\0')

{

if(insertChild(t1,r1,name2)){break;}

}

else

{

n=children(r1);

for(j=1;j<=n;j++)

{

if(strcmp(child(r1,j)->data,name2)==0)break;

}

if(j<=n)r2=child(r1,j);

else r2=NULL;

if(r2==NULL)printf("%s的路径不存在,不能添加\n",name2);

}

n=children(r1);

for(j=1;j<=n;j++)

{

if(strcmp(child(r1,j)->data,name2)==0)break;

}

if(j<=n)r1=child(r1,j);

else r1=NULL;

}

}

}

}

void check(SibTree *t)

{

SibTreeNode *r;

printf("输入要查找的文件名:");

char name[50];

cin>>name;

r=LevelOrderTraverse(t->root,name);

if(r==NULL)printf("没有此文件\n");

else

{

printf("此文件找到,创建时间为:");

printf("%d/%d/%d %d:%d:%d",r->year,r->month,r->day,r->hour,r->minute,r->second);

printf("\t子目录个数为:");

printf("%d\n",children(r));

}

}

void Delete(SibTree *t)

{

SibTreeNode *r,*p,*kid;

printf("输入要删除的文件名:");

char name[50];

cin>>name;

r=LevelOrderTraverse(t->root,name);

if(r==NULL)printf("没有此文件!\n");

else

{

if(r->firstChild!=NULL)printf("有子文件不能删除!\n");

else

{

p=r->parent;

kid=p->firstChild;

if(strcmp(kid->data,r->data)==0)p->firstChild=kid->nextSibling;

else

{

while(strcmp(kid->nextSibling->data,r->data))kid=kid->nextSibling;

kid->nextSibling=kid->nextSibling->nextSibling;

}

printf("已删除!\n");

}

}

}

void out(SibTree *t)

{

printf("输出文件目录的信息:\n");

printf("root:\n");

printf("%s",toString(t).c_str());

}

void main( )

{

SibTree t1;

int k;

TreeInitiate(&t1);

while(1)

{

printf("\n");

printf("\t 文件管理\t\n");

printf("\t********************************************************\t\n");

printf("\t *************对照号码输入你要进行的操作*************\n");

printf("\t 1 ——>添加\n");

printf("\t 2 ——>查找\n");

printf("\t 3 ——>删除\n");

printf("\t 4 ——>输出\n");

printf("\t 5 ——>退出\n");

printf("输入你想进行的操作号码:");

scanf("%d",&k);

if(k==5)break;

switch (k)

{

case 1: add(&t1);

break;

case 2: check(&t1);

break;

case 3: Delete(&t1);

break;

case 4: out(&t1);

break;

default:

printf("输入号码错误!\n");

}

}

}

(2)包含的头文件Sibtree.h

#include SYSTEMTIME sys;

typedef struct SibTreeNode

{

char data[50];

int valid;

int year;

int month;

int day;

int hour;

int minute;

int second;

int sonmulu;

int sonfile;

struct SibTreeNode * parent;

struct SibTreeNode *firstChild;

struct SibTreeNode *nextSibling;

}SibTreeNode;

typedef struct

{

SibTreeNode *root;

int size;

}SibTree;

typedef SibTreeNode *QueueDataType; #include "SeqCQueue.h"

int IsTreeEmpty(SibTree *t)

{

return t->size == 0;

}

int isValidNode(SibTreeNode *p)

{

if(p)

return p->valid;

else return 0;

}

//创建一个空树

void TreeInitiate(SibTree *t)

{

t->root = NULL;

t->size = 0;

}

//创建结点

SibTreeNode * newSibTreeNode(char x[50])

{

GetLocalTime(&sys);

SibTreeNode *p=(SibTreeNode *)malloc(sizeof(SibTreeNode));

strcpy(p->data,x);

p->valid = true;

p->year = sys.wYear;

p->month = sys.wMonth;

p->day = sys.wDay;

p->hour = sys.wHour;

p->minute = sys.wMinute;

p->second = sys.wSecond;

p->sonmulu=5; //扩充的信息,限制子目录的个数

p->sonfile=1; //限制子文件的个数

p->parent = NULL;

p->firstChild = NULL;

p->nextSibling = NULL;

return p;

}

//创建包含一个结点的树

void onenodeSibTree(SibTree *t,char x[50])

{

t->root = newSibTreeNode(x);

strcpy(t->root->data,x);

t->size = 1;

}

//输出当前结点的父亲节点

SibTreeNode *root(SibTreeNode *p)

{

if (p == NULL)

{

p= (SibTreeNode*)malloc(sizeof(SibTreeNode));

return p;

}

else

{

return p;

}

}

//插入根节点

void insertRoot(SibTree *t,char x[50])

{

SibTreeNode * newRoot = newSibTreeNode(x);

newRoot->firstChild = t->root;

if (t->root != NULL)

{

t->root->parent = newRoot;

}

t->root = newRoot;

t->size++;

}

// 输出树的大小

int size(SibTree *t)

{

return t->size;

}

// 构造一个不合法的结点

SibTreeNode * invalidSibTreeNode ()

{

SibTreeNode *p=(SibTreeNode *)malloc(sizeof(SibTreeNode));

p->valid = false;

return p;

}

//当前结点的孩子的个数

int children(SibTreeNode *p)

int count = 0;

SibTreeNode *countNode;

if (isValidNode(p))

{

countNode= p->firstChild;

while (countNode != NULL)

{

count++;

countNode = countNode->nextSibling;

}

return count;

}

else

{

return 0;

}

}

//返回当前结点的cth孩子结点

SibTreeNode *child(SibTreeNode *p,int c)

{

if (isValidNode(p))

{

if (c < 1)

{

return invalidSibTreeNode ();

}

SibTreeNode *kid = p->firstChild;

while ((kid != NULL) && (c > 1))

{

kid = kid->nextSibling;

c--;

}

if (kid == NULL)

{

return invalidSibTreeNode();

}

else

{

return kid;

}

}

else

throw "the node is not a valid node!";

}

//返回当前结点的兄弟结点

SibTreeNode *nextSibling(SibTreeNode *p)

{

if (isValidNode(p))

{

if (p->nextSibling == NULL)

{

return invalidSibTreeNode();

}

else

{

return p->nextSibling;

}

}

else

{

throw "the node is not a valid node!";

return invalidSibTreeNode();

}

}

//插入孩子结点

int insertChild(SibTree *t,SibTreeNode *p, char x[50]) {

SibTreeNode *n;

int i,flog=0;

for(i=0;x[i]!='\0';i++)

{

if(x[i]=='.'){flog=1;break;}

}

if(isValidNode(p))

{

n=p->firstChild;

if(n==NULL)

{

p->firstChild=newSibTreeNode(x);

p->firstChild->parent=p;

}

else

while(n!=NULL)

{

if(strcmp(n->data,x)==0){printf("输入的文件有重名,请更改名字!");break;}

if(n->nextSibling==NULL)break;

n=n->nextSibling;

}

if(strcmp(n->data,x)!=0)

{

if(flog==1&&children(n->parent)parent->sonfile)

{n->nextSibling=newSibTreeNode(x);n->nextSibling->parent=p;

}

else

if(flog==1)printf("文件数超出,不能继续存储\n");

else

if(flog==0&&children(n->parent)parent->sonmulu)

{n->nextSibling=newSibTreeNode(x);n->nextSibling->parent=p;}

else if(flog==0)printf("子目录超出,不能继续存储\n");

}

}

t->size++;

return 1;

}

else return 0;

}

//为当前结点插入兄弟结点

int insertnextSibing(SibTree *t,SibTreeNode *p, char x[50])

{

SibTreeNode *n;

if(isValidNode(p))

{

n=p->nextSibling;

if(n==NULL)p->nextSibling=newSibTreeNode(x);

else

{

while(n->nextSibling!=NULL)n=n->nextSibling;

n->nextSibling=newSibTreeNode(x);

n->nextSibling->parent=p->parent;

}

t->size++;

return 1;

}

else return 0;

//层序遍历

SibTreeNode *LevelOrderTraverse (SibTreeNode *t, char a[50]) {

SeqCQueue Q;

SibTreeNode *x;

if(t==NULL)return NULL;

QueueInitiate(&Q);

QueueAppend(&Q,t);

x=t->nextSibling;

while(x!=NULL)

{

QueueAppend(&Q,x);

x=x->nextSibling;

}

while(QueueNotEmpty(Q))

{

QueueDelete(&Q,&x);

if(strcmp(x->data,a)==0)break;

x=x->firstChild;

while(x!=NULL)

{

QueueAppend(&Q,x);

x=x->nextSibling;

}

}

return x;

}

//查找是否存在

int search(SibTree *t,char x[50])

{

if(LevelOrderTraverse(t->root,x)==NULL)return 0;

else return 1;

}

string preorderString(SibTreeNode *currentNode, int depth)

{

string s=" ";

stringstream out;

if (currentNode == NULL)

{

return "";

}

for (int i = 0; i < depth; i++)

{

s = s + " ";

}

out << currentNode->data;

s+=out.str();

s+="\n";

s+=preorderString(currentNode->firstChild, depth + 1) ;

s+=preorderString(currentNode->nextSibling, depth);

return s;

}

string toString(SibTree *t)

{

return preorderString(t->root, 0);

}

(3)包含头文件SeqCQueue.h

typedef struct

{

QueueDataType queue [50];

int front;

int rear;

int count; /* 队列的当前表长*/

} SeqCQueue;

//初始化

void QueueInitiate(SeqCQueue *Q)

{

Q->front=0;

Q->rear=0;

Q->count=0;

}

//判断队列非空

int QueueNotEmpty(SeqCQueue Q)

{

if(Q.count!=0) return 1;

else return 0;

}

//入队列

int QueueAppend(SeqCQueue *Q,QueueDataType x)

if(Q->count>0 && Q->rear==Q->front)

{

printf("队列已满无法插入!\n");

return 0;

}

else

{

Q->queue[Q->rear]=x;

Q->rear=(Q->rear+1)%50;

Q->count++;

return 1;

}

}

//出队列

int QueueDelete(SeqCQueue *Q,QueueDataType *x) {

if(Q->count==0)

{

printf("队列已空无数据元素出队列!\n");

return 0;

}

else

{

*x=Q->queue[Q->front];

Q->front=(Q->front+1)%50;

Q->count--;

return 1;

}

}

//取对头数据元素

int QueueGet(SeqCQueue *Q,QueueDataType *x) {

if(Q->count==0)

{

printf("队列已空无数据元素出队列!\n");

return 0;

}

else

{

*x=Q->queue[Q->front];

return 1;

}

}

文件目录管理与显示

3 文件目录管理与显示 1、题目的内容和要求 给出目录和文件信息,要求编程实现将其排列成一棵有一定缩进的树。 (1)设计文件和目录信息树的存储结构。 (2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即: \A \A\AA1 \A\AA1\aa1.doc … 创建时要检查同一路径下不能有同名的目录或文件名。 (3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。 (4)查找指定目录和文件。 (5)添加新目录或新文件。 (6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;根目录不能删除。 (7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。 (8)对同一层次下的子目录或文件按创建时间有序输出。 选做内容: (1)如何实现相对路径表示法。 (2)通配符的使用。如用“?”代表任意一个字符,用“*”表示任意多个多个任意字符。 2、设计 2.1设计思想 (1)数据结构设计:本体由于要对文件目录的处理,在一个文件中可以存放多个文件,所以用树,并且用孩子兄弟表示法,表示该树。 (2)算法设计:当在该目录下添加,查找,删除子目录时,相当于在该目录下对其孩子结点的处理,根据树建立和结点的孩子兄弟结点的处理来实现。 2.2设计表示 调用函数TreeInitiate(SibTree *t) 调用函数insertRoot( ) 调用函数insertChild( )

2.3详细设计 编写树的建立和孩子结点的添加、删除、搜索等函数是比较简单的,关键在函数中怎么去判断是给其插入孩子结点还是兄弟结点,在删除时还要判断该目录是否有子目录或者子文件……这些都要在写程序时考虑进去,我认为这个题的难点还是在输出上,因为要按照题目要求,以凹入法输出,在输出函数中就要想到用递归法来处理该问题。 3、调试 在写的过程中,没写一个函数都进行一次调试操作,以验证函数的正确性,在写完后,曾遇到过这样的情况:给一个结点的兄弟插入孩子结点时,出现了错误插入,变成了给该结点插入孩子结点,经过一步步的调试发现少一个判断过程,来判断这个结点是不是要插入的目的结点,通过修改问题被解决。 4、用户手册 此程序在VC下运行,在运行时要按照每一步的提示的规格去进行操作 5、测试数据和结果截图 (1)初始时运行如图 (2)进行添加操作,以输入0结束 (3)进行查找操作

项目4 文件权限管理

实训项目4 文件权限管理 一、实训目的 掌握利chmod及chgrp等命令实现Linux文件权限管理。 掌握磁盘限额的实现方法。 二、项目背景 某公司有60个员工,分别在5个部门工作,每个人工作内容不同。需要在服务器上为每个人创建不同的账号,把相同部门的用户放在一个组中每个用户都有自己的工作目录。并且需要根据工作性质个每个部门和每个用户在服务器上的可用空间进行限制。 假设有用户user1,请设置user1对/dev/sdb1分区的磁盘限额,将user1对blocks的soft设置为5000,hard设置为10000; inodes的soft设置为5000,hard设置为10000。 三、实训内容 练习chmod、chgrp 等命令的使用,练习在Linux下实现磁盘限额的方法。 四、实训步骤 子项目1.设置文件权限 在用户user1主目录下创建目录test,进入test目录创建空文件filel。并以长格形式显示文件信息注意文件的权限和所属用户和组。 对文件filel设置权限,使其他用户可以对此文件进行写操作。并查看设置结果。 取消同组用户对此文件的读取权限。查看设置结果。 用数字形式为文件filel设置权限,所有者可读、可写、可执行;其他用户和所属组用户只有读和执行的权限。设置完成后查看设置结果。 用数字形式更改文件filel的权限,使所有者只能读取此文件,其他任何用户都没有权限。查看设置结果。 为其他用户添加写权限。查看设置结果。 回到上层目录,查看test的权限。 为其他用户添加对此目录的写权限。 子项目2、改变文件的所有者 查看目录test及其中文件的所属用户组。 把目录test及其下的所有文件的所有者改成bin,所属组改成daemon。查看设置结果。 删除目录test及其下的文件。 子项目3.磁盘限额 启动vi编辑/etc/fstab文件,把/etc/fstab文件中的/dev/sdb1 分区添加用户和组的磁盘限额,重新启动系统.

linux文件与目录管理命令大全

1、mkdir -p test1/test2/test3 循环创建目录 rmdir -p test1/test2/test3 循环删除目录,前提这些目录都是空 mkdir -m 711 test4 指定目录的权限,如果不加m的话就是默认权限 2、PATH 查找文件属性的命令的ls的完整文件是:/bin/ls,为什么在任何一个地方输入ls都可以 进行文件的查找呢?因为环境变量PATH的帮助,当执行ls时候,系统会按照PATH定义的路径 去寻找,如果PATH中含有多个文件名为ls的文件,先被查询到的会被执行! echo $PATH >>> /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/s bin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin: /root/bin 上面是root用户,当是一般用户时候: echo $PATH>>> /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/h ome/cao/bin

由此可见PATH这个文件的内容是由一堆目录组成的,每个目录用:隔开,发现不管是 一般用户还是超级用户,都有/bin目录,所以都可以执行ls,因为ls就在bin下面! 但是一般用户没有sbin目录,这也是为什么有些命令只有超级用户才可以执行! 例题1:一般用户 $ifconfig eth0 不成功 超级用户 #ifconfig eth0 成功 一般用户 $/sbin/ifconfig eth0 成功 例题2:假如你是root,如果将ls由/bin/ls 移动成/root/ls(mv /bin/ls /root)然后你自己也在root目录下, (1)可不可以直接输入ls来执行? 不行,因为/root的这个目录并不在PATH指定目录中 (2)若不能该如何来执行? /root/ls 或者./ls (3)若要直接可以用ls可以执行,怎么做?将/root加入PATH 中,PATH="$PATH":/root 这个例题做好之后,别忘记将ls再次移动过来,否则系统就要出问题了! 3、查看文件与目录

5文件权限管理

实训项目5 文件权限管理 一、实训目的 ●掌握利用chmod及chgrp等命令实现Linux文件权限管理。 ●掌握磁盘限额的实现方法。 二、项目背景 某公司有60个员工,分别在5个部门工作,每个人工作内容不同。需要在服务器上为每个人创建不同的账号,把相同部门的用户放在一个组中,每个用户都有自己的工作目录。并且需要根据工作性质给每个部门和每个用户在服务器上的可用空间进行限制。 假设有用户user1,请设置user1对/dev/sdb1分区的磁盘限额,将user1对blocks的soft设置为5000,hard设置为10000;inodes的soft设置为5000,hard设置为10000。 三、实训内容 练习chmod、chgrp等命令的使用,练习在Linux下实现磁盘限额的方法。 四、实训步骤 子项目1.设置文件权限 ●在用户user1主目录下创建目录test,进入test目录创建空文件file1。并以长格形式显示文件信息,注意文件的权限和所属用户和组。 ●对文件file1设置权限,使其他用户可以对此文件进行写操作。并查看设置结果。 ●取消同组用户对此文件的读取权限。查看设置结果。 ●用数字形式为文件file1设置权限,所有者可读、可写、可执行;其他用户和所属组用户只有读和执行的权限。设置完成后查看设置结果。

●用数字形式更改文件file1的权限,使所有者只能读取此文件,其他任何用户都没有权限。查看设置结果。 ●为其他用户添加写权限。查看设置结果。 ●回到上层目录,查看test的权限。 ●为其他用户添加对此目录的写权限。 子项目2.改变文件的所有者 ●查看目录test及其中文件的所属用户和组。 ●把目录test及其下的所有文件的所有者改成bin,所属组改成daemon。查看设置结果。 ●删除目录test及其下的文件。

实验五、用户管理与权限管理

实验五、用户管理和权限管理 一、实验目的 1、掌握对系统用户和组的建立与管理。 2、掌握linux的文件访问权限和访问权限类型。 3、掌握如何设置文件访问权限。 二、实验重点与难点 1、学会使用useradd、usermod和userdel命令 2、学会使用chmod设置文件权限 三、实验内容及步骤 1)查看/etc/passwd文件和/etc/shadow文件内容,识别该文件中记录的信 息内容。 2)使用YaST创建新用户user1和用户组group1,将用户user1加入到组 group1。 3)用useradd命令建立2个用户admin和geeko(注意要求创建用户主目 录),设定好对应的用户密码,再用groupadd命令建立一个用户组school。 4)使用命令将admin用户改名为administrator。 5)使用命令将administrator账户锁定,然后再使用该账户登录系统,观 察会发生什么?然后再将账号解除锁定。 6)将linux系统注销使用geeko账号登录,在geeko的主目录下创建两个 新的文件K1,K2。在/tmp目录下创建两个文件W1,W2。 7)删除geeko账号及其主目录。并尝试删除所有属于geeko用户的文件。 8)在/tmp目录中创建两个新文件newfile,test,将newfile文件访问权限 设置为rwxrw-rw-,test文件访问权限设置为rwxr--r-- 。 9)使用su命令将用户身份切换至administrator,将“I can read and write”写入newfile文件中,并保存。是否可以对test文件进行编辑? 10)如果要实现其他用户对test文件的编辑权限,应该如何设置该文件的 权限?写出操作的命令。 11)创建一个目录directory,将目录访问权限设置为rwxrwxrw-。

多级文件目录的文件管理系统文件.doc

山东理工大学计算机学院课程设计 (操作系统) 班级 姓名 学号 指导教师 二○一一年六月二十四日

课程设计任务书及成绩评定 课题名称基于多级文件目录的文件管理系统设计 Ⅰ、题目的目的和要求: 巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上 面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。 Ⅱ、设计进度及完成情况 日期内容 6.13-6.15 选取参考书,查阅有关文献资料,完成课程设计说明 书内容 1 部分。完成课程设计说明书内容2-4 部分 6.16~6.20 创建相关数据结构, 录入源程序 6.21~6.22 调试程序并记录调试中的问题,完成课程设计说明书第5 部分。 6.23 系统测试,演示设计成果,考核成绩。 整理课程设计说明书,上午11 时,由学习委员交课 6.24 程设计说明书(计算机科学系9#213 或直接交给指导 教师) Ⅲ、主要参考文献及资料 [1] 汤子赢等. 计算机操作系统(第二版). 西安电子科技大学出版社,2006.8

[2] 冯耀霖等. 操作系统,西安电子科技大学出版社.1992 [3] 张尧学等. 计算机操作系统教程( 第2 版). 清华大学出版社,2001.4 [4] 谭耀铭. 操作系统. 中国人民大学出版社,2003.4 [5] 刘坤起. 操作系统学习辅导与习题详解[M]. 北京: 电子工业出版社, 2003:58-67 [6] 孙钟秀等编著,操作系统教程[M],高等教育出版社,2003:46-78 Ⅳ、成绩评定: 设计成绩:(教师填写) 指导老师:(签字) 二○一一年六月二十四日

5文件与目录管理

项目5 文件与目录管理 任务描述: 任务一:启动计算机,利用root用户登录到系统,查看提示符;用pwd目录查看目前所在的目录;用ls目录列出当前目录下的文件和目录;列出此目录下包括隐藏文件在内的所有文件和目录并且长格式显示;长格形式列出当前目录下的所有文件,注意比较每个文件的长度和创建时间的不同;进入/home目录下,创建测试目录test;利用ls目录列出文件和目录,确认test目录创建成功;回到上一层工作目录,删除test目录;cd /后,进入root的主目录(分别用绝对路径和相对路径进入)。 任务二:查看/etc/passwd文件类型;利用touch命令,在/home目录创建一个新的空文件newfile;使用man cat 命令查看cat命令使用帮助;只看/etc/passwd的前5行内容;只看/etc/passwd的后5行内容;分别用cat、more、less、head、tail查看/etc/passwd文件,看看有什么区别? 任务三:查看/root及其子目录下以install开头的文件;查找显示/etc/passwd文件中包含root的行;查找/home目录下的所有名为profile的文件;查找httpd.conf。 任务四:利用cp命令复制系统文件/etc/profile到/home目录下;在/home中复制文件profile 到一个新文件profile.bak,作为备份;将/boot目录中的所有文件及其子目录复制到/root中。任务目标: ●掌握文件操作相关命令 ●掌握目录操作相关命令 任务重点: ●文件和目录操作命令 任务难点: ●文件和目录操作命令 知识准备: 5.1.1 文件及目录概述 1.文件系统的含义 文件系统是一种存放在格式化的存储介质上的能够被操作系统管理的文件集合Linux 文件均为无结构的字符流形式。文件名是文件的标识,它由字母、数字、下划线和圆点组成的字符串来构成。 Linux要求文件名的长度限制在255个字符以内.为了便于管理和识别,用户可以把扩展名作为文件名的一部分。圆点用于区分文件名和扩展名。 扩展名对于将文件分类是十分有用的。如:C语言编写的源代码文件具有.C的扩展名。 1). 普通文件: 分为文本文件和二进制文件。 错误!未找到引用源。文本文件:以ASCII码形式存储在计算机中。以“行”为基本结构的一种信息组织和存储方式。 错误!未找到引用源。二进制文件:以文本的二进制形式存储在计算机中,不能直接被读取,通过相应的软件才能将其显示。一般是可执行程序、图形、图像、声音等。utmpdump

实验五 Linux文件系统和权限管理

实验5 Linux文件系统和权限管理 1 实验目的 1、掌握Linux文件系统的控制机制及权限的表示方法。 2、掌握权限管理常用的命令。 2 实验环境 VMware中已经安装好CentOS5.4版本。 3 实验原理 1、Linux文件系统权限及管理机制可参见教材P83~P84。 2、Linux常用文件权限管理命令主要有:chmod、chown两个,这些命令的使用可参见教材P86~P104或者帮助手册。 4 实验任务 1、使用chm od、chown命令完成文件权限的设置、修改等操作。 5 实验步骤 1、使用命令查看/etc/hosts文件的权限,其权限是。 2、使用命令可以复制文件/etc/hosts到目录/tmp 下,然后使用命令或设置其读写权限为:文件所有者可以读、写和执行,同组用户可以读和执行,其他用户只可以执行。(要求使用两种方法实现) 3、修改题目2中复制的文件的所有者:所有者为用户test(需要事先创建),组所有者为m ail,使用的命令是。 4、查看系统当前的um ask值,并设置umask值为033,创建文件word,其权限是。(自己验证。想一想,为什么?) 5、将系统的时间设置为22:10的命令是,将日期和时间按照格式:mm/dd/yy hh:mm:ss显示输出的命令是。 6、保存2009年全年的日历在文件cal2009中的命令是。 7、将2009年1月的日历导出保存到文件cal.1中的命令是,将2009年2月的日历追加到2009年1月的日历后面的命令是。 8、假定需要显示信息:host: 主机名。使用hostnam e命令替换显示主机的名称的操作是

研发项目管理文件目录(全面)

研发项目管理文件目录一、项目立项阶段 《项目需求分析说明书》 《项目可行性研究报告》 《研发项目立项申请报告》 《项目评估报告》 二、项目启动阶段 《合同》 《合同概况表》 《项目组成员表》 《项目组工作说明书》 《项目成员责任分配矩阵》 三、项目计划阶段 《项目成本估算表》 《项目整体风险水平定性分析表》 《项目范围说明书》 《项目沟通计划》 《项目WBS工作表》

《项目实施进度表》 《项目技术方案》 《项目设计方案报审表》 《系统设计任务书》 四、项目设备管理 《项目采购计划明细表》 《采购设备分配表》 《硬件产品请购单》 《采购设备验收单》 五、项目进度管理 《项目会议纪要》 《项目周报》 《项目成员工作周报》 《项目月报》 《项目月进度控制一览表》 《某月/季项目进度汇报表》 《项目阶段性评审报告》 《项目进度偏差控制表》 《项目实施问题处置单》

六、项目风险管理 《项目风险管理表》 七、项目变更管理 《项目变更申请单》 《项目变更管理表》 《项目变更动力、阻力分析表》 《项目延期申请表》 八、项目测试阶段 《系统测试用例表》 《项目单元测试方案》 《软件Bug详细记录表》 《系统测试问题报告单》 《系统缺陷状态跟踪表》 《项目测试报告》 九、项目收尾阶段 《系统试运行报告》 《项目内部验收报告》

《项目竣工初验报告》 《项目最终正式验收报告》 《项目完工验收交接书》 《项目验收单》 《项目款支付报审表》 《项目培训计划表》 《用户操作手册》 十、项目总结 《项目总结报告》 《项目团队内部经验总结》 十一、管理部门 《资料管理清单》 《合同修订记录》 《文件和资料现行状态清单》 《最终项目文件列表》

Linux文件和目录管理常用命令

Linux文件和目录管理常用命令 工具/原料 相对路径与绝对路径 常用命令介绍 查看文件内容 Linux文件和目录管理常用命令 linux mint 相对路径:相对于目前路径,开头不是/,例如 ./home/; 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/; 1 END pwd:显示当前工作目录。 1 cd:切换目录。 1.cd或者cd ~:进入当前用户的家目录 2.cd .. :表示进入上一级目录 3.cd . :当前目 录 4.cd ../.. : 向上两级 2 ls:查看文件和目录 1. ls -a 显示所有文件,包括隐藏文件(注:linux隐藏文件以.开头的,..代表存在父目录 )2. ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等3. ls -F 显示文件类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、“*”可执行文件、"= "表示套接字。4. ls -s 在每个文件的后面打印出文件的大小。 size(大小) 5. ls -S 以文件的大小进行排序 6. ls -t 按时间进行文件的排序 Time(时间) 7. ls -A 列出除了"."和".."以外的文件。 8. ls - R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现9. ls -L列出文件的链接名。Link(链接) 10.ls -d 仅列出目录本身,而不是列出目录内的文件数据 常用组合命令 按文件大小排序:ls -lS 易读方式来显示大小: ls-lh 列出文件下的子目录:ls -F /opt/soft |grep /$ 计算当前目录下的文件数:ls -l * |grep "^-"|wc -l 计算当前目录下的目录数:ls -l * |grep "^d"|wc -l 注:linux文件颜色的含义绿色---->代表可执行文件红色---->代表压缩文件深蓝色---->代表目录浅蓝色----->代表链接文件灰色---->代表其它的一些文件 3 mkdir:建立目录 mkdir -m: 对新建目录设置存取权限,也可以用chmod命令设置;mkdir -p: 直接建立所需要的目录递归.(建立多级目录) 例:创建一个空目录 :mkdir test 递归创建多个目录 :mkdir -p test1/test2/test3 创建权限目录 :mkdir -m 777 test4 4 touch 建立空文件与修改文件时间 touch -a: 仅修改atime touch -c: 仅修改时间,而不建立文件 touch -d: 后面可以接日期,也可以使用 --date=”日期或时间” touch -m: 仅修改mtime touch -t: 后面可以接时间,格式为 [YYMMDDhhmm] 例:新建一个空文件:touch test 将test日期调整为2天前:touch -d "2 days ago" test 5 END cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写! 注:cat 和tac不分屏(一般用在小文件,大文件显示不下);合并文件,仅在屏幕上合并,并不改变原文件。 1 more 一页一页的显示文件内容 空格键 (space):代表向下翻一页; Enter :代表向下翻【一行】; /字符串 :代表在这个显示的内容当中,向下搜寻【字符串】; :f :立刻显示出文件名以及目前显示的行数; q :代表立刻离开 more ,不再显示该文件内容。 less 与 more 类似,但是比 more 更好的是,他可以往前翻页! 2

教给你八招把电脑里的文件管理起来

教给你八招把电脑里的文件管理起来 成堆的有用无用的纸、杂乱无章的书籍和办公用品散落在各处,这就是我们办公桌上的一般情形。在电脑的内部,在电脑的桌面上,在“资源管理器”中,也同样充斥着无序与混乱。这种虚拟的混乱极大地影响了电脑的性能和我们办公的效率,当许多人面临这个问题时,认为硬盘空间又不够了,电脑性能又不跟不上了,需要再换一台新的电脑了。事实上,我们真正需要的是坐下来,好好花时间将电脑里的文件真正管理起来,会为自己日后省下更多的时间。 文件管理的真谛在于方便保存和迅速提取,所有的文件将通过文件夹分类被很好地组织起来,放在你最能方便找到的地方。解决这个问题目前最理想的方法就是分类管理,从硬盘分区开始到每一个文件夹的建立,我们都要按照自己的工作和生活需要,分为大大小小、多个层级的文件夹,建立合理的文件保存架构。此外所有的文件、文件夹,都要规范化地命名,并放入最合适的文件夹中。这样,当我们需要什么文件时,就知道到哪里去寻找。这种方法,对于相当数量的人来说,并不是一件轻松的事,因为他们习惯了随手存放文件和辛苦、茫无头绪地查找文件。下面,我们将帮你制订一套分类管理的原则,并敦促您养成好的文件管理习惯。以下是我们总结出的一些基本技巧,这些技巧并不是教条,可能并不适合你,但无论如何你必须要有自己的规则,并坚持下来,形成习惯。 第一招发挥我的文档的作用 有很多理由让我们好好地利用“我的文档”,它能方便地在桌面上、开始菜单、资源管理器、保存/打开窗口中找到,有利于我们方便而快捷地打开、保存文件。我们可以利用“我的文档”中已有的目录,也可以创建自己的目录,将经常需要访问的文件存储在这里。至于“我的文档”存储在C盘,在重装系统时可能会误删除的问题,可以在非系统盘建立一个目录,然后右击桌面上的“我的文档”,选择“属性”。在弹出的“我的文档属性”窗口中,单击目标文件夹下的“移动”按钮,然后在新的窗口中指定我们刚创建的文件夹。重装系统后再次执行以上操作,再重新指向此文件夹即可,即安全又便捷。 小提示 如果你使用Windows 2000/XP,则移动“我的文档”文件夹时,其下的所有文件会自动移过去,但如果你使用Windows 9x,则需要手工将C:\My Documents下的所有文件手工移到新指定的文件夹中,否则可能会丢失数据。 第二招建立最适合自己的文件夹结构 文件夹是文件管理系统的骨架,对文件管理来说至关重要。建立适合自己的文件夹结构,需要首先对自己接触到的各种信息、工作和生活内容进行归纳分析。每个人的工作和生活有所不同,接受的信息也会有很大差异,因此分析自己的信息类别是建立结构的前提。比如,有相当多的IT自由撰稿人和编辑就是以软件、硬件的类别建立文件夹;而很多老师,就是以自己的工作内容比如教学工作、班主任工作建立文件夹。 同类的文件名字可用相同字母前缀的文件来命名,同类的文件最好存储在同一目录,如图片目录用image,多媒体目录用media,文档用doc等等,简洁易懂,一目了然,而且方便用一个软件打开。这样,当我们想要找到一个文件时,能立刻想到它可能保存的地方。 第三招控制文件夹与文件的数目 文件夹里的数目不应当过多,一个文件夹里面有50个以内的文件数是比较容易浏览和检索的。如果超过100个文件,浏览和打开的速度就会变慢且不方便查看了。这种情况下,就得考虑存档、删除一些文件,或将此文件夹分为几个文件或建立一些子文件夹。另一方面,如果有文件夹的文件数目长期只有少得可怜的几个文件,也建议将此文件夹合并到其他文件夹中。 第四招注意结构的级数

文件目录管理

文件和目录的管理(一) 命令行的格式: 命令名[选项][参数1][参数2]..... 1:命令名由小写的英文字母构成 2:选项是对命令的特别定义,以“-”开始,多个选项可用一个“-”连起来 3:参数提供命令运行的信息 例如: [root@teacher vnc]# ls -l /home 查看/home目录里的内容,显示详细信息 ls 是命令-l 选项(可供选择的项目)/home是参数(参加操作的数)中间用空格隔开 [root@teacher ~]# [] 分隔符号 root 代表是当前登录用户(root用户是linux系统里的超级管理员,windwos里的是administrator) @ 分隔符号 teacher 代表是主机名 ~代表你当前所在的路径是用户家目录(假如是root用户,~代表的路径为/root)

***********# 代表的是超级用户的提示符号 ***********$ 代表的是普通用户的提示符号 相对路径和绝对路径: 在liunx中,绝对路径是从/(根目录)开始如:cd /etc/sysconfig 相对路径是从当前路径开始即./ 内部命令和外部命令: 内部命令:shell程序的一部分 外部命令:独立于shell解释之外的程序文件,可查找的是外部命令例如: [root@localhost software]# which cd(查找cd的完全路径) /usr/bin/which: no cd in (/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bi n:/bin:/root/bin) (括号里的路径为安装一般默认的路径) 文件,目录操作常规命令: 目录操作命令: pwd、cd 、ls、mkdir、du 文件操作命令 touch 、file 、cp 、rm 、mv 、ln

电子文档文件夹目录管理规范

电子文档文件夹目录管理规范 总工办 为快速查询资料,GIS快速调用地图和超级链接,便于技术资料更新和汇交,工作交接,保持项目组资料与集团公司领导和档案室资料及时同步,公司制定统一的电子文档文件夹目录管理规范,任何个人不得私自改动和命名,不得私建和自创。 一、电子文档管理混乱引起的恶果 1、不同的人私自没有规律的乱建文件夹和文件命名,连自己都不知道文件存放在哪里,检索耗时,文件重复占用资源。 2、GIS中心调用资料困难,改动文件夹名或随意存放文件难造成GIS中心无法调用文件,只有一个一个寻址调用,浪费时间,效率低。 3、工作交接困难,不同人随意无规律存放资料,造成项目经理之间调职工作交接费事,花费好长时间才能熟悉工作,重新整理资料费时过大,效率低下。 4、资料汇交麻烦,项目组与总部使用不同的文件管理结构,造成归档困难、费时。 5、资料更新费时,不能很快的与上级资料保持及时同步,影响沟通与指导工作。 6、影响设计、报告编写与综合研究 二、“电子文档文件夹目录管理规范”的优点 1、使用有规律的文件存放模式,方便GIS中心调用。一上班,鼠标点击一下,轻松加载不同地区不同比例尺的遥感、地质、化探、物探图层,节省时间,省去许多麻烦。 2、使用有规律的文件存放模式,自己熟悉文件存放路径,快速准确的存取与检索。 3、项目组与分公司资料室、总部实行统一的文件管理模式,及时归档。 4、项目组与分公司资料室、总部实行统一的文件管理模式,及时同步,利用server,轻点鼠标,几秒钟内实行同步,省去了网络传输资料费时或文件大无法传递的麻烦。 5、不同的人使用统一的文件管理模式,方便工作交接,新上任项目经理能很快熟悉资料,快速开展工作。 6、使用有规律的文件管理模式,有利于每日成果更新。 7、使用有规律的文件管理模式,有利于文件格式的转换,快速找到文件存放地址。 8、使用有规律的文件管理模式,有利于综合研究、设计与报告编写。

文件目录管理实验报告

操作系统课程设计报告采用二级目录实现文件管理 学院:信息工程学院 班级:计科1002班 姓名:杨辉 学号:101304230 指导教师:邹姝稚 时间:2013年1月 成绩:

目录 一设计目的 (3) 二课题任务 (3) 三课题相关知识 (4) 四课题设计 (6) 五设计内容 (8) 六运行与测试 (14) 七设计总结 (17)

一.设计目的: 文件系统是现代OS用来存储和管理信息的机构,具有按名存取的功能,不仅能方便用户对信息的使用,也有效提高了信息的安全性。本课题模拟文件系统的目录结构,并在此基础上实现文件的各种操作方法。 通过课程设计, 深入理解文件目录的作用和功能,掌握文件打开结构,熟悉与文件有关的系统调用,从而更好的掌握文件系统的概念。 (1)掌握文件系统的基本原理、结构和实现方法。 (2)掌握文件系统中文件的建立、打开、读/写、执行、属性等系统调用的使用 (3)学会设计简单的文件系统并实现一组操作 (4)通过实验学习文件系统的系统调用命令,提高文件系统实现功能的理解和掌握。 二.课题任务 为简单起见,假设文件物理结构为连续结构,编程模拟一个简单的文件系统,实现对文件的各种管理和控制功能。 1.文件目录采用二级目录结构,第一级为文件目录MFD,如图1所示;第二级为用户文件目录UFD,如图2所示。 在UFD中,文件保护方式,用0表示文件可读;用1表示文件可读可写,执行,用2表示文件可写。 2.为加速文件存取,为每个用户建立一张用户打开文件表UOF,用以记录该用户当前正在使用的文件。假定最多允许打开4个文件,该表设置问4项,当打开文件个数超过4时,应给出出错信息。为此应该设置一个用户打开文件计数器,以控制文件打开个数,计数器初始化为0.UOF结构图如图3所示。 在图3中,“文件操作方式”时指文件打开后要执行的操作,“状态”是指用户打开文件表的各个表象为空表目或被占用。读写指针用来指出文件的存取位置。出事状态下,读指针=1,写指针=文件长度,文件长度=0。 用户建立或打开一个文件时,将制定文件的说明信息登记在用户打开文件表中,其中为了给创建的文件分配磁盘空间,可引入一个计数器,用它来模拟磁盘使用情况,初始化为10。假定一个磁盘块大小为64个字节。

第5章 磁盘文件与目录管理

第五章磁盘文件与目录管理 5.1 按名存取 P152 5.1.1文件命名 P152 注意 5.1.2 路径绝对路径当前目录相对路径。P153 5.2常用的磁盘,文件和目录管理命令 p154 5.2.1 磁盘管理 5.2.1.1 查看磁盘空间的使用情况 p154 1.命令方式 参考示例:检查文件系统使用情况 检查所有文件系统的使用情况,并以便于阅读的方式输出 检查所有文件系统的使用情况,列出所有文件系统的名称与类型 安装windows系统C盘的文件系统,列出所有文件系统的名称 2、图形方式 5.2.1.2显示磁盘上目录或文件的大小 p156 1.命令方式 参考实例:列出当前目录下所有文件所占用的磁盘空间。 列出 /var 目录占用的磁盘空间,并给出统计信息 2、图形方式 5.2.2 文件与目录管理 p158 5.2.2.1 目录切换在命令行方式下使用cd命令切换目录。 5.2.2.2 显示当前目录使用pwd命令查看。 5.2.2.3 建立目录 1、命令行方式在命令行方式下建立目录使用mkdir命令。 ?参考示例:建立名为public的目录,让所有的用户都有rxw权限。 在当前目录stu下建立stu1/pro/fox目录,但stu目录下没有任何目录存在。 5.2.2.4 文件或目录复制 p160 1、命令行方式在命令行方式下采用cp命令复制文件或目录。 使用cp命令的注意点: 参考示例: 复制文件file1、file2、file3与目录directory1到目录directory2下。 复制符号链接文件sever到目标目录/home/stu下。 复制/var/tmp/netvigator文件到目录twngsm下。 5.2.2.5 移动文件或目录 p161 ?1、命令行方式采用mv命令移动文件或目录,该命令也可用于为文件或目录更名。 参考示例1:在当前目录下移动文件sudo.txt、suid.txt和目录bin到目标目录/home/stu/temp下。 把当前目录下文件sudo.txt更名为sd.txt,如果sd.txt存在,则将它备份为sd.txtbak文件。 5.2.2.6 删除空目录rmdir p162 5 .2.2.7 删除文件或目录 p163 ?命令行方式在命令行方式下,删除文件或目录使用rm命令。 ?参考实例删除当前目录中的所有文件和子目录。 5.2.2.8 显示目录内容 p164 ls

文件目录管理与显示

数据结构课程设计 学生姓名:王文莉 学号:20111000399 院(系):计算机学院专业:网络工程 指导教师:李桂玲 2013年 1月5日

第4题:文件目录管理与显示 1.需求分析 1.1问题描述:给出目录和文件信息,要求编程实现将其排列成一棵有一定缩进的 树。给出目录和文件信息(如图 A ),要求编程实现将其排列成一颗有一定缩进的树(如图B ) A AA1 A B c.txt aa1.doc AA2 AA1 AA2 B C.txt aa1.doc 图A 图B 其中,“\ ”表示根目录,A、B 是其下面的子目录,c.txt 是其下面的文件;类似地,AA1 、AA2 是A 下面的子目录,aa1.doc 是AA1 下的文件。 1.2基本要求: (1)设计文件和目录信息树的存储结构。 (2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即: \A \A\AA1 \A\AA1\aa1.doc … 创建时要检查同一路径下不能有同名的目录或文件名。 (3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。 (4)查找指定目录和文件。 (5)添加新目录或新文件。 (6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;根目录不能删除。 (7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。 (8)对同一层次下的子目录或文件按创建时间有序输出。 (9)通配符的使用。如用“?”代表任意一个字符,用“*”表示任意多个多个任意字符。 扩展内容: 实现相对路径表示法。

1.3对课程设计成果的要求〔包括图表、实物等硬件要求〕: 报告纸质双面打印,后面附有报告内容及格式要求,不打印源程序;同时,每个同学提交报告和程序的电子档,以班级为单位刻录光盘。详见2012年秋193111-3DS课设安排。 2.设计 2.1 设计思想 2.1.1数据结构设计—逻辑结构设计 firstchild firstchild Parent info Parent info brother brother 子目录或子文件 firstchild Parent info brother 同层目录或文件 图C 在存储结构方法上,采用二叉链表法,为简化对目录或文件的称呼,以下统称为 结点。 每个目录和文件都有基本信息,根据要求建立结构体,如下: *parent filetype flag *brother *firstchild time name n cenci size 文件创建时间信息结构: typedef struct creat_time { int year; int month; int date; }creat_time;

文件目录管理与显示

数据结构 指导老师:陈桂玲 罗开华 | 193132班 | 20131001842 2015年1月5日

题号:4 题目:文件目录管理与显示 1.需求分析 给出目录和文件信息,编程实现将其排列成一棵有一定缩进的树。 要求: (1)设计文件和目录信息树的存储结构。 (2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即: \A \A\AA1 \A\AA1\aa1.doc \A\AA1\aa2.txt …创建时要检查同一路径下不能有同名的目录或文件名 (3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。 (4)查找指定目录和文件。 (5)添加新目录或新文件。 (6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;根目录不能删除。 (7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。 (8)对同一层次下的子目录或文件按创建时间有序输出。 (9)通配符的使用。如用“?”代表任意一个字符,用“*”表示任意多个多个任意字符。扩展内容:实现相对路径表示法。 2.设计 2.1设计思想 (1)数据结构设计 在存储结构方法上,采用二叉链表法,为简化对目录或文件的称呼,以下统称为结点。 每个目录和文件都有基本信息,根据要求建立结构体 (2)算法设计 (1)创建根目录 a. 申请结点,输入基本信息;

b.所有指针置空; (2)结点创建 P 代表母结点 a..判断所给结点是否为目录。不是,则给出失败信息; b.查看是否在同一层有重名,若有,给出失败信息; c. 申请结点,完善基本信息; e. 根据母目录确定是否为孩子或孩子兄弟成员,建立链接关系; f.结点孩子指针,兄弟指针置空; q->firstchild=NULL; q->brother=NULL; (3)根据所给结点名称与同一层存在的结点名称比较,定位到所需结点; info*Compare(char*ch,info*p) //同级指针,根据文件名在同级目录里查找指定文件; a.判断是否为根结点; b. 回到该层次的第一个结点,即结点父亲的firstchild 指向结点; c.依次比较,确定位置,若不存在,返回NULL ; (4)绝对路径法提取目录名或文件名,定位指定结点 \****\****\****\*** a. 由该层内的应该用户给出的结点名称,提取字符段; b.根据该段字符在该层次内查找定位到存在的结点,若不存在,给出失败信 息 c.提取下一段字符,到S2 继续比较;直到结束符*; (5)树形展开目录 分析:对数据结构设计中图C 进行顺时针45 度旋转得到下图D Parent L1 Brother info Firstchild L2 Parent Parent Brother info Firstchild Brother info Firstchild L1 忽略指针L1 、L2 ,可以发现这是一颗二叉树;故图A 或图B 可以构成二叉树,图形如下: A

多级文件目录的文件管理系统

山东理工大学计算机学院 课程设计 (操作系统) 班级 姓名 学号 指导教师 二○一一年六月二十四日 课程设计任务书及成绩评定 课题名称基于多级文件目录的文件管理系统设计 Ⅰ、题目的目的和要求: 巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。

Ⅱ、设计进度及完成情况

Ⅲ、主要参考文献及资料 [1] 汤子赢等.计算机操作系统(第二版).西安电子科技大学出版社, [2] 冯耀霖等.操作系统,西安电子科技大学出版社.1992 [3] 张尧学等.计算机操作系统教程(第2版).清华大学出版社, [4] 谭耀铭.操作系统.中国人民大学出版社, [5] 刘坤起. 操作系统学习辅导与习题详解[M]. 北京: 电子工业出版社, 2003:58-67 [6]孙钟秀等编着,操作系统教程[M],高等教育出版社,2003:46-78 Ⅳ、成绩评定: 设计成绩:(教师填写) 指导老师:(签字) 二○一一年六月二十四日

目录 第一章概述 (1) 第二章系统分析 (2) 第三章系统设计 (3) 第四章程序设计流程图或N-S图 (6) 第五章调试过程中的问题及系统测试情况 (7) 第六章结束语 (9) 附录 (10)

第一章概述 课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《计算机操作系统》一门重要的专业课,是开发操作系统和软件系统的理论和应用基础。 本课程设计要求设计一个基于多级文件目录的文件管理系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 第二章系统分析 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多级文件目录的文件管理系统。 2.文件物理结构可采用显式链接或其他方法。 4.文件目录结构采用多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为。 5.设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:

目录和文件管理

1 linux命令分类 内部命令:shell自带的命令。 外部命令:shell之外另安装的程序。 2 linux命令格式 命令字【选项】【参数】 命令字不可以省略,选项和参数有时候可以不加。选项和参数有时候可 以调换位置。 命令的技巧: tab键补全,\换行,ctrl+U删行前,ctrl+k删行后,ctrl+L清 屏,ctrl+C终止 3 linux命令帮助的方法 ①内部命令的帮助方法:help pwd ②外部命令的帮助方法:ls --help ③在线命令的帮助方法:man ls,在man中可以用/来查询,例如查询-v 选项可以输入/-v 4 目录和文件的基本操作-----pwd pwd,插看当前目录 mkdir /abc 在跟下创建目录 cd /abc 切换目录。 pwd 查看目录 操作示范: ls,列表就像双击文件夹看到的结果。-l长格式-a看隐藏,-h看大小,--color带颜色。 echo 123 > 1.txt 创建了一个123内容的文件1.txt ls 查看到了1.txt ls -l 查看长格式 ls -a 查看隐藏文件(隐藏文件.和..稍后解释) 操作示范:

alias myls='ls -alh',定义别名让命令更加个性化,别名 操作示范 du -sh /boot,插看boot目录的总大小。几M而已 du -ah /boot,插看boot的大小。几M而已,还有下面子目录中每个文件的具体大小 5 创建目录mkdir ls,看看自己建立的文件 mkdir /aa/bb/cc,发现无法一次性建立多个目录 mkdir -p /aa/bb/cc,发现可以一次性建立多个目录 ls -R /aa,看到了多级目录。

相关文档