操作系统实验终于全部做完啦,这是最后一个,是模拟磁盘操作的,大概的理解了题意之后发现其实这个很简单的,原来一直想找个机会联系一下文件操作,这下可好, 好好的熟悉了一下。 注:一定要是绝对路径! 这个程序实现的功能有: 1建立文件 2读文件 3写文件 4删除文件 5建立文件夹 6显示文件夹内的文件列表 7删除文件夹 8显示文件属性 9改写文件属性 由于最近事比较多,心情比较烦,所以文件复制,重命名之类的都没去弄他,回头有时间再看看,总之题目的功能是实现了,一下的代码估计有我没测试到的BUG,仅供参考 #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <dirent.h> #include <unistd.h> #include <fcntl.h> #include <string.h> void showmenu() { 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("请选择功能:"); } int createfile() { int flag; char name[50]; printf("请输入要创建的文件名称:"); scanf("%s",name); if((flag=open(name,O_CREAT|O_RDWR|O_TRUNC,0700))<0) { perror("文件创建失败!\n"); exit(1); } else printf("文件创建成功!\n"); close(flag); } int readfile() { char buffer[100],name[50]; int fd; printf("请输入要读取的文件名称:"); scanf("%s",name); fd=open(name,O_RDONLY); if(fd<0) { printf("文件打开失败!\n"); exit(1); } read(fd,buffer,sizeof(buffer)); printf("%s\n",buffer); close(fd); } int writefile() { char buffer[100],name[50]; int fd; printf("请输入要写入的文件名称:"); scanf("%s",name); fd=open(name,O_WRONLY); if(fd<0) { printf("文件打开失败!\n"); exit(1); } printf("请输入要输入文件的内容:\n"); getchar(); scanf("%s",buffer); write(fd,buffer,sizeof(buffer)); close(fd); } void deletefile() { char name[50]; int flag; printf("请输入删除的文件名称:"); scanf("%s",name); flag=remove(name); if(flag==0) printf("文件删除成功!\n"); else printf("文件删除失败!\n"); } void creatediction() { char name[50]; printf("请输入目录的名称(以根目录开始):\n"); scanf("%s",name); int flag=mkdir(name,S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH); if(flag==0) printf("文件夹创建成功!\n"); else printf("文件夹创建失败!\n"); } int showdiction() { DIR * dir; struct dirent * ptr; int i; char * name; printf("请输入要显示的文件目录名称:\n"); scanf("%s",name); dir=opendir(name); ptr=readdir(dir); //if(ptr==NULL) //{ //printf("目录为空,请新建一个文件\n"); //return 0; //} while((ptr=readdir(dir))!=NULL) { printf("%s\n",ptr->d_name); } closedir(dir); } int deletediction() { char name[50]; int flag; printf("请输入文件夹的名称:"); scanf("%s",name); flag=rmdir(name); if(flag==0) printf("文件夹删除成功!\n"); else printf("文件夹不为空,请删除文件!\n"); } void showmode() { char name[50]; int flag,n; struct stat buf; printf("请输入要显示的文件名称:"); scanf("%s",name); flag=stat(name,&buf); n=buf.st_mode; //printf("%d\n",buf.st_mode); switch(n) { case 33088: printf("%s--------500\n",name); break; case 32960: printf("%s--------300\n",name); break; case 33261: printf("%s--------700\n",name); break; default: break; } if(flag!=0) printf("文件属性显示失败!\n"); } int changemode() { char name[50]; int flag,n; printf("请输入要改变的文件名称:"); scanf("%s",name); printf("请输入要改变的类型:\n"); printf("1.只读\n2.只写\n3.可读可写\n"); scanf("%d",&n); switch(n) { case 1: flag=chmod(name,0500); if(flag==0) printf("文件已改为只读类型!\n"); else printf("文件修改失败!\n"); break; case 2: flag=chmod(name,0300); if(flag==0) printf("文件已改为只写类型!\n"); else printf("文件修改失败!\n"); break; case 3: flag=chmod(name,0700); if(flag==0) printf("文件已改为可读可写类型!\n"); else printf("文件修改失败!\n"); break; default: break; } } int main() { int n; while(1) { showmenu(); scanf("%d",&n); switch(n) { case 1: createfile(); break; case 2: readfile(); break; case 3: writefile(); break; case 4: deletefile(); break; case 5: creatediction(); break; case 6: showdiction(); break; case 7: deletediction(); break; case 8: showmode(); break; case 9: changemode(); break; default: printf("输入有误,请重新选择!\n"); break; } } } |
|