All pastes #26700 Raw Edit

Someone

public cpp v1 · immutable
#26700 ·published 2005-10-26 02:54 UTC
rendered paste body
if(numpipes==0){	// single command}else{	int fdsi[2];	// file descriptors currently dealing with input	int fdso[2];	// file decsriptors currently dealing with output	char** argv=new char*[cmd2.size()];	int i=0,j;	if(pipe(fdso)<0)	{	//error	}	for(j=0;cmd2[i+j]!="|"&&i+j<cmd2.size();++j)	{	argv[j]=new char[cmd2[i+j].length()+1];		strcpy(argv[j],cmd2[i+j].c_str());	}	argv[j]=NULL;	i=j+1;	pid=fork();	if(pid<0)	{	//error	}	else if(pid==0)	{	dup2(fdso[1],1);		close(fdso[0]);		close(fdso[1]);		execvp(argv[0],argv);		// error	}	for(j=0;argv[j];++j)	{	delete[] argv[j];	}	for(int pipesdone=1;pipesdone<numpipes&&i<cmd2.size();++pipesdone)	{	fdsi[0]=fdso[0];		fdsi[1]=fdso[1];		if(pipe(fdso)<0)		{	//error		}		for(j=0;cmd2[i+j]!="|"&&i+j<cmd2.size();++j)		{	argv[j]=new char[cmd2[i+j].length()+1];			strcpy(argv[j],cmd2[i+j].c_str());		}		argv[j]=NULL;		i=j+1;		pid=fork();		if(pid<0)		{	//error		}		else if(pid==0)		{	dup2(fdsi[0],0);			dup2(fdso[1],1);			close(fdso[0]);			close(fdso[1]);			execvp(argv[0],argv);			// error		}		for(j=0;argv[j];++j)		{	delete[] argv[j];		}	}	for(j=0;cmd2[i+j]!="|"&&i+j<cmd2.size();++j)	{	argv[j]=new char[cmd2[i+j].length()+1];		strcpy(argv[j],cmd2[i+j].c_str());	}	argv[j]=NULL;	i=j+1;	pid=fork();	if(pid<0)	{	//error	}	else if(pid==0)	{	dup2(fdsi[0],0);		close(fdso[0]);		close(fdso[1]);		execvp(argv[0],argv);		// error	}	for(j=0;argv[j];++j)	{	delete[] argv[j];	}}