本文將編寫一個程序,當程序跑起來時,可以輸入linux下的相關命令,然後程序也會返回相應命令的結果。
具體實現代碼如下:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h> //isspace
int main()
{
char buf[1024] = {};
while(1)
{
pid_t id = fork();
if(id == 0)//child
{
char* my_arg[32];
printf("myshell>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = 0;
char* p = buf;
int i = 1;
my_arg[0] = buf;
while(*p)
{
if(isspace(*p))
{
*p = 0;
p++;
my_arg[i++] = p;
}
else
{
p++;
}
}
my_arg[i] = NULL;
execvp(my_arg[0],my_arg);
}
else
{
int status = 0;
pid_t ret = waitpid(id,&status,0);
if(ret > 0)
{
//printf("%d\n",status&0X7F);
}
else
{
printf("waitpid runnning error\n");
}
}
}
p++;
my_arg[i++] = p;
}
else
{
p++;
}
}
my_arg[i] = NULL;
execvp(my_arg[0],my_arg);
}
else
{
int status = 0;
pid_t ret = waitpid(id,&status,0);
if(ret > 0)
{
//printf("%d\n",status&0X7F);
}
else
{
printf("waitpid runnning error\n");
}
}
}
p++;
my_arg[i++] = p;
}
else
{
p++;
}
}
my_arg[i] = NULL;
execvp(my_arg[0],my_arg);
}
else
{
int status = 0;
pid_t ret = waitpid(id,&status,0);
if(ret > 0)
{
//printf("%d\n",status&0X7F);
}
else
{
printf("waitpid runnning error\n");
}
}
}
return 0;
}
運行結果如下:
但是代碼還是有缺陷,輸入命令若是輸錯時,不能刪除,只能重新輸入。