代码

#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;
}
posted on 2022-05-30 21:40  彼岸花不开彼岸  阅读(26)  评论(0)    收藏  举报