首先总结一下思路:
1. 如果要支持管道就首先需要分析命令中是否包含管道。(使用stringcmp函数)
2.如果包含管道就将管道符号位置为NULL,然后将管道符号前后的命令分到两个指针数组中 即:tmp1[ ]和tmp2[ ]
3.这个时候需要执行两个execvp函数,我们为了保证循环的进程不会被替换,需要fork两次,分别用孙子进程执行tmp1[ ]和子进程执行tmp2[ ]。
4.关于管道创建的位置(很关键),创建的位置要在儿子进程中,并且在孙子进程创建之前。(在其他位置会发生不知名错误)。
父进程等待就行了。
以下是代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
void do_parse(char *buf,char* argv[])
{
if(buf==NULL)
{
return;
}
if(argv==NULL)
{
return;
}
int i;
int argc=0;
int status=0;
for(i=0;buf[i];i++)
{
if( !isspace(buf[i]) && status==0)
{
argv[argc+&