操作系統(tǒng)實(shí)驗(yàn)終于全部做完啦,這是最后一個(gè),是模擬磁盤操作的,大概的理解了題意之后發(fā)現(xiàn)其實(shí)這個(gè)很簡(jiǎn)單的,原來(lái)一直想找個(gè)機(jī)會(huì)聯(lián)系一下文件操作,這下可好, 好好的熟悉了一下。 注:一定要是絕對(duì)路徑! 這個(gè)程序?qū)崿F(xiàn)的功能有: 1建立文件 2讀文件 3寫文件 4刪除文件 5建立文件夾 6顯示文件夾內(nèi)的文件列表 7刪除文件夾 8顯示文件屬性 9改寫文件屬性 由于最近事比較多,心情比較煩,所以文件復(fù)制,重命名之類的都沒(méi)去弄他,回頭有時(shí)間再看看,總之題目的功能是實(shí)現(xiàn)了,一下的代碼估計(jì)有我沒(méi)測(cè)試到的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èi)容\n"); printf("7-刪除目錄\n"); printf("8-顯示文件屬性\n"); printf("9-改變文件屬性\n"); printf("請(qǐng)選擇功能:"); } int createfile() { int flag; char name[50]; printf("請(qǐng)輸入要?jiǎng)?chuàng)建的文件名稱:"); scanf("%s",name); if((flag=open(name,O_CREAT|O_RDWR|O_TRUNC,0700))<0) { perror("文件創(chuàng)建失敗!\n"); exit(1); } else printf("文件創(chuàng)建成功!\n"); close(flag); } int readfile() { char buffer[100],name[50]; int fd; printf("請(qǐng)輸入要讀取的文件名稱:"); 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("請(qǐng)輸入要寫入的文件名稱:"); scanf("%s",name); fd=open(name,O_WRONLY); if(fd<0) { printf("文件打開失?。n"); exit(1); } printf("請(qǐng)輸入要輸入文件的內(nèi)容:\n"); getchar(); scanf("%s",buffer); write(fd,buffer,sizeof(buffer)); close(fd); } void deletefile() { char name[50]; int flag; printf("請(qǐng)輸入刪除的文件名稱:"); scanf("%s",name); flag=remove(name); if(flag==0) printf("文件刪除成功!\n"); else printf("文件刪除失??!\n"); } void creatediction() { char name[50]; printf("請(qǐng)輸入目錄的名稱(以根目錄開始):\n"); scanf("%s",name); int flag=mkdir(name,S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH); if(flag==0) printf("文件夾創(chuàng)建成功!\n"); else printf("文件夾創(chuàng)建失??!\n"); } int showdiction() { DIR * dir; struct dirent * ptr; int i; char * name; printf("請(qǐng)輸入要顯示的文件目錄名稱:\n"); scanf("%s",name); dir=opendir(name); ptr=readdir(dir); //if(ptr==NULL) //{ //printf("目錄為空,請(qǐng)新建一個(gè)文件\n"); //return 0; //} while((ptr=readdir(dir))!=NULL) { printf("%s\n",ptr->d_name); } closedir(dir); } int deletediction() { char name[50]; int flag; printf("請(qǐng)輸入文件夾的名稱:"); scanf("%s",name); flag=rmdir(name); if(flag==0) printf("文件夾刪除成功!\n"); else printf("文件夾不為空,請(qǐng)刪除文件!\n"); } void showmode() { char name[50]; int flag,n; struct stat buf; printf("請(qǐng)輸入要顯示的文件名稱:"); 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("請(qǐng)輸入要改變的文件名稱:"); scanf("%s",name); printf("請(qǐng)輸入要改變的類型:\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("輸入有誤,請(qǐng)重新選擇!\n"); break; } } } |
|