All pastes #930991 Raw Edit

Someone

public text v1 · immutable
·published 2008-03-06 22:08 UTC
rendered paste body
static int pipline(char **args, int argsNb,int bg, int pip0, int pip1, char *pipeArgs){
	printf("in piplien fun\n");
	//saving stdout fd
	int fdStdout = dup(1);
	int fdStdin = dup(0);
	
	if(pip0!=-1 && pip1==-1){ //there's something to read
		int tpip[2];
		pipe(tpip);

		printf("now reading from pipe\n");
		dup2(tpip[1], 1);
		dup2(tpip[0], 0);
		//parse pipeArgs an give them to run command
		run_command(args, argsNb, bg);
		printf("%s", pipeArgs);
		
		close(tpip[0]);
		close(tpip[1]);
		dup2(fdStdin, 0);
		dup2(fdStdout, 1);
		//printf("got from pipe: %s\n", pipeArgs);
	}
	else if(pip1!=-1){ // now redirect output to pipe
		printf("now start writing to pipe\n");
		dup2(pip1,1);

		setvbuf(stdout,(char*)NULL,_IONBF,0);
		
		printf("------pipe starts here\n");
		
		run_command(args, argsNb, bg);
		
		int res = read(pip0, pipeArgs, 1000); //read from pipe
		//int res = read(pip0, pipeArgs, sizeof(pipeArgs)); //read from pipe
		if (res == -1) return (error);
		else printf("ok: reading from pipe\n");
		

		printf("------pipe ends here\n");
		
		//restore
		close(pip1);
		dup2(fdStdout,1);

		printf("writing back to stdout\n");
	}
	else
		run_command(args, argsNb, bg);

	printf("exit of piplien fun\n");
	return(0);
}