간단 한 셸 프로그램 을 모 의 하여 간단 한 명령 을 실현 합 니 다.

기능:////나 는 이 프로그램 을 다른 블 로그/////////////////////////////1 에 보 내 고 현재 있 는 디 렉 터 리 의 경로 명 (명령 pwd) 을 표시 합 니 다. 2. 지정 한 디 렉 터 리 이름 의 모든 디 렉 터 리 와 파일 (명령 list) 을 표시 합 니 다. 3. 현재 작업 디 렉 터 리 (명령 chadir) 를 변경 합 니 다. 4. 새 디 렉 터 리 (명령 makedir) 5. 디 렉 터 리 삭제 (명령 deldir) 6.명령 해석 프로그램 (명령 exit) 7 을 종료 하고 파일 이나 디 렉 터 리 (명령 rename) 8 의 이름 을 바 꾸 고 존재 하 는 파일 (명령 copy) 9 을 복사 합 니 다. 지정 한 디 렉 터 리 와 하위 디 렉 터 리 에서 지정 한 파일 을 찾 고 찾 은 파일 의 절대 경 로 를 출력 합 니 다.
下面的代码可以直接复制运行,笔者目前还未发现bug,每个功能封装在一个函数中,可以单个取出使用运行参考慢慢理解;

* * 사용 하 는 시스템 함수: * * open (), close (), read (), write (), chdir (), opendir (), readdir (), closed ir (), rmdir (), mkdir (), getcwd ();
코드 는 다음 과 같 습 니 다.
#include"stdio.h"
#include"string.h"
#include"unistd.h"
#include"string.h"
#include"sys/types.h"
#include"sys/stat.h"
#include"stdlib.h"
#include"dirent.h"
#include"stddef.h"
#include"fcntl.h"
///////////////////////////////////////////////////////
void pwd_();
void makedir_();
void deldir_();
void exit_();
void chadir_();
void list_();
void rename_();
void copy_();
void find_();
void error_();
////////////////////////////////////////////////////
#define buffsize 1024

int main(void)
{
	char command[30];
while(1)
{	
	printf("Liangfenkai@");
	scanf("%s",command);
	fflush(stdin);
	if(strcmp(command,"pwd")==0)	
	{
	pwd_();
	}
	else if(strcmp(command,"makedir")==0)  
	{
	makedir_();
	}
	else if(strcmp(command,"deldir")==0) 	
	{
	deldir_();
	}
	else if(strcmp(command,"exit")==0)
	{
	exit_();
	}
	else if(strcmp(command,"chadir")==0) 
	{
	chadir_();
	}
	else if((strcmp(command,"list")==0))
	{
	list_();
	}
	else if(strcmp(command,"rename")==0)	
	{
	rename_();
	}
	else if(strcmp(command,"copy")==0)	
	{
	copy_();
	}
	else if(strcmp(command,"find")==0)	
	{
	find_();
	}
	else 		
	error_();
}
return 0;
}

//打印当前觉得路径//////////////////////////////////////////////////////////////////////////
void pwd_()
{
     char *path=NULL;
	 path=getcwd(NULL,0);
     puts(path);
     free(path);
}
//创建文件夹/////////////////////////////////////////////////////////////////////////
void makedir_()
{
	char command1[30];
	scanf("%s",command1);
    fflush(stdin);
    if(mkdir(command1,0755)!=0)     
    printf("make dir default!
"); } //删除文件夹//////////////////////////////////////////////////////////////////////// void deldir_() { char command2[30]; scanf("%s",command2); fflush(stdin); if(rmdir(command2)!=0) printf("delete dir default!
"); } //退出程序////////////////////////////////////////////////////////////////////////// void exit_() { exit(0); } //改变目录路径/////////////////////////////////////////////////////////////////////// void chadir_() { char command3[50]; scanf("%s",command3); fflush(stdin); if(chdir(command3)!=0) { printf("change dir path default!
"); } } //列出指定目录名中的所有目录及文件/////////////////////////////////////////////////////////////////////// void list_() { char command4[50]; struct dirent *entry; DIR *olist=NULL; int i=1; scanf("%s",command4); fflush(stdin); if((olist=opendir(command4))==NULL) { printf("opendir default!
"); } while(entry=readdir(olist)) { printf("file%d:%s
",i,entry->d_name); i++; } i=1; if(closedir(olist)!=0) printf("closedir default!
"); } //重命名一个文件或目录/////////////////////////////////////////////////////////// void rename_() { char newname[30],oldname[30]; printf("pleace input the old name:"); scanf("%s",oldname); fflush(stdin); printf("pleace input the new name:"); scanf("%s",newname); fflush(stdin); if(rename(oldname,newname)!=0) { printf("change name default!"); } } //复制一个已存在的文件/////////////////////////////////////////////////////////////////////////// void copy_() { char cp1[30],cp2[30],buf[buffsize]; int fd1,fd2; int n; printf("pleace input the file be copy:
"); scanf("%s",cp1); fflush(stdin); printf("pleace input the new file name:
"); scanf("%s",cp2); if((fd1=open(cp1,O_RDWR|O_CREAT,0664))==-1) printf("open the file false!
"); if((n=read(fd1,buf,buffsize))==-1) printf("read the file false!
"); if((fd2=open(cp2,O_RDWR|O_CREAT,0664))==-1) printf("open the file false!
"); if(write(fd2,buf,n)==-1) printf("open the file false!
"); if(close(fd1)==-1) printf("close false!
"); if(close(fd2)==-1) printf("close false!
"); } //在指定的目录及其子目录中查找指定的文件,并输出查找到的文件的绝对路径/////////////// void find_() { char *path1; char str1[30],str2[30]; struct dirent *re; int j=0; DIR *dir; scanf("%s",str1); fflush(stdin); scanf("%s",str2); fflush(stdin); if((dir=opendir(str1))==NULL) printf("open dir error!
"); while((re=readdir(dir))!=NULL) { if(strcmp(re->d_name,str2)==0) { chdir(str1); path1=getcwd(NULL,0); puts(path1); chdir(".."); j=1; } } if(j==0) { printf("no the file!
"); } } //输入指令错误时会提示,并可以重新输入////////////////////////////////////////////////////////////////////// void error_() { printf("input default!
"); }
(1)strcmp()原型为:int strcmp(const char *str1, const char *str2)作用是:比较字符串str1与str2,若str1>str2则返回值大于0,str1==str2返回值等于0,str1

좋은 웹페이지 즐겨찾기