간단 한 셸 프로그램 을 모 의 하여 간단 한 명령 을 실현 합 니 다.
下面的代码可以直接复制运行,笔者目前还未发现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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
독서 노트문제1: 한 파일에 10000000개의 기록이 포함되어 있으며, 각 기록의 내용은 7자리의 정수이다.기록은 중복되지 않는다.파일 내용을 읽는 프로그램이 필요하고, 이 기록을 정렬한 후 파일을 출력해야 하며, 메모리는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.