void menu(void);
void open);
void write);
void read);
void copy);
void chmd(void);
void ckqx(void);
void cjml(void);
void scml(void);
void ggml(void);
void ylj(void);
int main()
{
int choose;
int suliangjin=1;
menu();
scanf(\"%d\
while(choose!=0)
{
switch(choose)
{
case 1:openfile();break;
case 2:writefile();break;
case 3:readfile();break;
case 4:copyfile();break;
case 5:chmd();break;
case 6:ckqx();break;
case 7:cjml();break;
case 8:scml();break;
case 9:ggml();break;
case 10:ylj();break;
}
menu();
scanf(\"%d\
}
return 0;
}
void menu(void)
{
printf(\"文件系统\\n\");
printf(\"1.创建新文件\\n\");
printf(\"2.写文件\\n\");
printf(\"3.读文件\\n\");
printf(\"4.复制文件\\n\");
printf(\"5.修改文件权限\\n\");
printf(\"6.查看文件权限\\n\");
printf(\"7.创建子目录\\n\");
printf(\"8.删除子目录\\n\");
printf(\"9.改变目前目录到指定目录\\n\");
printf(\"10.链接操作\\n\");
printf(\"0.退出\\n\");
printf(\"请输入您的选择...\\n\");
}
void open)
{
int fd;
if((fd=open(\"/tmp/hello.c\
perror(\"open\");
else
printf(\"open %d\\n\
if(close(fd)<0)
perror(\"close\");
else
printf(\"Close hello.c\\n\");
}
void write)
{
int fd,size,len;
char *buf=\"Hello!I'm writing to this file!\";
len=strlen(buf);
if((fd=open(\"/tmp/hello.c\
perror(\"open\");
else
printf(\"open %d\\n\
if((size=write(fd,buf,len))<0)
perror(\"write\");
else
printf(\"Write:%s\\n\
if(close(fd)<0)
perror(\"close\");
else
printf(\"Close hello.c \\n\");
}
void read)
{
int fd,size;
char b[10];
if((fd=open(\"/tmp/hello.c\
perror(\"open\");
else
printf(\"open %d\\n\
lseek(fd,0,SEEK_SET);
if((size=read(fd,b,10))<0)
perror(\"read\");
else
printf(\"read from \\n\
if(close(fd)<0)
perror(\"close\");
else
printf(\"Close hello.c\\n\");
}
void copy)
{
if(fork()==0)
execlp(\"/bin/cp\
else
wait(0);
printf(\"将hello.c复制he.c\");
}
void chmd(void)
{
int a;
printf(\"1.文件主可读可写可执行\\n\");
printf(\"2.文件主可读\\n\");
printf(\"3.文件主可写\\n\");
printf(\"4.文件主可执行\\n\");
printf(\"请输入您的选项\\n\");
scanf(\"%d\
switch(a)
{
case 1:chmod(\"/tmp/hello.c\
case 2:chmod(\"/tmp/hello.c\
case 3:chmod(\"/tmp/hello.c\
case 4:chmod(\"/tmp/hello.c\
default:printf(\"您选择有误\\n\");
}
}
void ckqx(void)
{
char *path=\"/bin/ls\";
char *argv[4]={\"ls\
if(fork()==0)
execv(path,argv);
else
wait(0);
}
void cjml(void)
{
if(mkdir(\"/tmp/a\
perror(\"Mkdir\");
else
printf(\"创建成功\\n\");
}
void scml(void)
{
if(rmdir(\"/tmp/a\")<0)
perror(\"Rmdir\");
else
printf(\"删除成功\\n\");
}
void ggml(void)
{
if(chdir(\"/tmp/bc\")<0)
perror(\"chdir\");
else
printf(\"更改目录成功\\n\");
}
void ylj(void)
{
if(link(\"hello.c\
perror(\"Link\");
else
printf(\"建立硬连接\\n\");
}
打开文件:
写文件:
读文件:
复制文件:
修改权限:
查看权限:
创建目录:
删除目录:
更改目录:
硬连接:
问题解决方案:
1. 在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺陷。后来我在execlp前面加if(fork)()==0)
就可以咯
2. 硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已经更改了目录所以就会经常报错
3. 到现在还不知道为什么我读出来的是乱码情解决
实验心得体会:
通过这次实验掌握Linux提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。