/* gcc -Wall -O2 -g chpid.c -o chpid */ #define _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED #define _SVID_SOURCE #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char **argv, char **envp) { if (argc<3) { printf("Usage: vsyssh \n"); exit(1); } else { int vfd0,vfd1; char *inf,*outf; inf=(char *)malloc(strlen(argv[1])+3); outf=(char *)malloc(strlen(argv[2])+4); strcpy(inf,argv[1]); strcpy(inf,argv[2]); strcat(inf,".in"); strcat(outf,".out"); vfd1 = open(inf,O_WRONLY); vfd0 = open(outf,O_RDONLY); if (vfd0==-1 || vfd1 == -1) { printf("Error opening vsys entry %s\n", argv[1]); exit(1); } close(0); close(1); dup2(vfd0,0); dup2(vfd1,1); execve(argv[3],argv+3,envp); } return; }