通过进程等待,程序替换,以及子进程创建等知识,已经可以写出一个类似于shell命令行的程序。
总共有四步:
1.接受标准命令,并把命令放入字符串
2.解析命令,把一个个命令解析成字符串放入运行参数中
3.创建子程序,进行程序替换。
4.进程等待
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
int main()
{
while(1)
{
printf("[dev@minishell]$ ");
fflush(stdout);//刷新标准缓冲区
//1.等待标准输入
char buf[1024]={0};
fgets(buf,1023,stdin);
buf[strlen(buf)-1]='\0';
//2.对输入数据进行解析
int argc=0;
char *argv[32]={NULL};
char *ptr=buf;
while(*ptr !='\0'){
if(*ptr !=' '){
argv[argc]=ptr;
argc++;
while(*ptr!=' '&&*ptr !='\0'){
ptr++;
}
*ptr='\0';
}
ptr++;
}
argv[argc]=NULL;
//3.创建子进程
//4.在子进程中程序替换
pid_t pid=fork();
if(pid==0)
{
int ret= execvp(argv[0],(char **)argv);
if(ret<0){
perror("execvp error");
return -1;
}
exit(0);
}
//5.进程等待
wait(NULL);
}
return 0;
}
本文介绍了一个基于C语言的简易Shell命令行程序实现过程,包括标准输入接收、命令解析、子进程创建及程序替换等关键步骤。通过使用fork()、execvp()和wait()等系统调用,实现了类似Shell的功能。
1546

被折叠的 条评论
为什么被折叠?



