代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/wait.h>
int main(void)
{
char buf[256], *argv[256], **p;
int sv;
for (;;)
{
printf("=> ");
//读入标准输入
if (fgets(buf, sizeof(buf), stdin) == NULL)
exit(0); //ctrl+D退出
//对字符串进行分割 结果放到argv里面
for (p = &argv[0], *p = strtok(buf, " \t\n"); *p != NULL;
*++p = strtok(NULL, " \t\n"));
//空输入
if (argv[0] == NULL)
continue;
//内部命令
if (strcmp(argv[0], "exit") == 0)
exit(0);
//子进程
if (fork() == 0)
{
//没有创建新进程 一旦执行成功 便不会执行后续
execvp(argv[0], argv);
//执行失败 退出
fprintf(stderr, "** Bad command\n");
exit(1);
}
wait(&sv);
}
return 0;
}