c语言简易实现linux终端,代码:
<PRE class=brush:java;></PRE><PRE class=brush:java;>Linux系统的命令分为内部命令和外部命令两种,内部命令由Shell程序实现,如cd、echo等,Linux的内部命令数量有限,而且绝大部分都很少用到。而每一个Linux外部命令都是一个单独的应用程序,我们非常熟悉的ls、cp等绝大多数命令都是外部命令,这些命令都以可执行文件的形式存在,绝大部分放在目录/bin和/sbin中。这样一来,我们编程的难度就可以大大下降了,我们只需要实现很有限的内部命令,对于其它的输入,统统当作应用程序来执行即可。
</PRE><PRE class=brush:java;></PRE><PRE class=brush:java;><STRONG>//MyShell.c</STRONG></PRE><PRE class=brush:java;>#include <STDIO.H>
#include <STRINGS.H>
#include <UNISTD.H>
#include <STDLIB.H>
#include <FCNTL.H>
#define MAXSIZE 100
void info_print();
int main(int argc, char const *argv[])
{
/* code */
while(1){
char command[MAXSIZE];
pid_t pid;
int status;
info_print();
bzero(command,MAXSIZE);
gets(command);
if(-1==(pid=fork())){
perror(fork);
exit(-1);
}
if(pid>0){
wait(&status);
}else{
int i,flag=0,j=0;
char *file,*argv ;
file=command;
argv[flag++]=command;
for(i=0;command[i]!='';i++){
while(command[i]==' '){
command[i++]='';
j=1;
}
if(1==j){
argv[flag++]=command+i;
j=0;
}
}
argv[flag]=NULL;
if(0==strncmp(file,cd,2)){
//printf(OK%s
,argv );
if(-1==chdir(argv )){
perror(chdir);
exit(-1);
}
}else{
if(-1==execvp(file,argv)){
//perror(execvp);
fprintf(stderr,%s: command not found
,file);
}
}
}
}