/* Copyright 2003 Renzo Davoli
* Licensed under the GPL
*/
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
int p1[2],p2[2];
int splitindex(int argc, char *argv[]) {
register int i;
for (i=1; i<argc && strcmp(argv[i],"=") != 0; i++)
;
if (i>=argc)
return (-1);
else
return i;
}
int main(int argc, char *argv[]) {
int split;
char **argv1,**argv2;
split=splitindex(argc,argv);
if (argc < 4 || split < 0 || split == argc-1) {
fprintf(stderr,"Usage: %s cmd1 [arg1...] = cmd2 [arg2...]\n",argv[0]);
exit (-1);
}
pipe(p1);
pipe(p2);
argv[split]=NULL;
argv1=argv+1;
argv2=argv+(split+1);
if (fork()) {
close(p1[1]); close(p2[0]);
dup2(p1[0],STDIN_FILENO);
dup2(p2[1],STDOUT_FILENO);
execvp(argv1[0],argv1);
} else {
close(p2[1]); close(p1[0]);
dup2(p2[0],STDIN_FILENO);
dup2(p1[1],STDOUT_FILENO);
execvp(argv2[0],argv2);
}
return (0);
}
syntax highlighted by Code2HTML, v. 0.9.1