文件系统 :Linux文件管理_linux磁盘文件管理
文件系统 :Linux文件管理由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“linux磁盘文件管理”。
实验5 文件系统 :Linux文件管理
1.实验目的(1)掌握Linux提供的文件系统调用的使用方法;(2)熟悉文件和目录操作的系统调用用户接口;
(3)了解操作系统文件系统的工作原理和工作方式。2.实验内容
(1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能: *********** 0.退出
1.创建新文件 2.写文件 3.读文件 4.复制文件 5.修改文件权限 6.查看文件权限 7.创建子目录 8.删除子目录
9.改变当前目录到指定目录 10.链接操作 *********** 代码:
#include #include #include #include #include #include #include #include void menu(void);void openfile(void);void writefile(void);void readfile(void);void copyfile(void);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”,&choose);
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”,&choose);
}
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 openfile(void){
int fd;
if((fd=open(“/tmp/hello.c”,O_CREAT|O_TRUNC|O_RDWR,0666))
perror(“open”);
else
printf(“open file:hileo.c %dn”,fd);
if(close(fd)
perror(“close”);
else
printf(“Close hello.cn”);} void writefile(void){
int fd,size,len;
char *buf=“Hello!I'm writing to this file!”;
len=strlen(buf);
if((fd=open(“/tmp/hello.c”,O_CREAT|O_TRUNC|O_RDWR,0666))
perror(“open”);
else
printf(“open file:hileo.c
%dn”,fd);
if((size=write(fd,buf,len))
perror(“write”);
else
printf(“Write:%sn”,buf);
if(close(fd)
perror(“close”);
else
printf(“Close hello.c n”);} void readfile(void){
int fd,size;
char b[10];
if((fd=open(“/tmp/hello.c”,O_CREAT|O_TRUNC|O_RDWR,0666))
perror(“open”);
else
printf(“open file:hileo.c %dn”,fd);
lseek(fd,0,SEEK_SET);
if((size=read(fd,b,10))
perror(“read”);
else
printf(“read from file:%sn”,b);
if(close(fd)
perror(“close”);
else
printf(“Close hello.cn”);} void copyfile(void){
if(fork()==0)
execlp(“/bin/cp”,“cp”,“/tmp/hello.c”,“/tmp/he.c”,NULL);
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”,&a);
switch(a)
{
case 1:chmod(“/tmp/hello.c”,S_IRWXU);printf(“ok!n”);break;
case 2:chmod(“/tmp/hello.c”,S_IRUSR);printf(“ok!n”);break;
case 3:chmod(“/tmp/hello.c”,S_IWUSR);printf(“ok!n”);break;
case 4:chmod(“/tmp/hello.c”,S_IXUSR);printf(“ok!n”);break;
default:printf(“您选择有误n”);
} } void ckqx(void){
char *path=“/bin/ls”;
char *argv[4]={“ls”,“-l”,NULL};
if(fork()==0)
execv(path,argv);
else
wait(0);} void cjml(void){
if(mkdir(“/tmp/a”,S_IRWXU)
perror(“Mkdir”);
else
printf(“创建成功n”);} void scml(void){
if(rmdir(“/tmp/a”)
perror(“Rmdir”);
else
printf(“删除成功n”);} void ggml(void){
if(chdir(“/tmp/bc”)
perror(“chdir”);
else
printf(“更改目录成功n”);} void ylj(void){
if(link(“hello.c”,“h.c”)
perror(“Link”);
else
printf(“建立硬连接n”);} 打开文件:
写文件:读文件:
复制文件:
修改权限:
查看权限:
创建目录:
删除目录:
更改目录:
硬连接:
问题解决方案:
1.在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺陷。后来我在execlp前面加if(fork)()==0)就可以咯
2.硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已经更改了目录所以就会经常报错
3.到现在还不知道为什么我读出来的是乱码情解决
实验心得体会:
通过这次实验掌握Linux提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。