#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
close(1);
open("xyz", O_RDWR | O_CREAT, 00600);
execlp("ls", "ls", (char *) NULL);
return 0;
}
#include <sys/types.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
int cmdc(int argc, char *argv[]) {
int i;
int c = 0;
for (i = 0; i < argc; i++) {
if (! strcmp(argv[i],"@")) c++;
}
return c + 1;
}
char **cut_cmd(int nr, char *argv[]) {
int i, c;
char **new_argv;
for (i = 1, c = 0; c < nr; i++) {
if (!strcmp(argv[i],"@")) c++;
}
new_argv = &(argv[i]);
for (i = i+1; argv[i] != (char *)NULL; i++) {
if (!strcmp(argv[i],"@")) argv[i] = (char *)NULL;
}
return new_argv;
}
int main(int argc, char *argv[]) {
int c_cmd, i;
int pid;
int pfd[2];
int src_fd = 0;
int err = 0;
c_cmd = cmdc(argc, argv);
for (i=0; i < c_cmd; i++) {
if (i+1< c_cmd) { pipe(pfd); }
pid = fork();
if (pid == 0) {
argv = cut_cmd(i, argv);
if (src_fd != 0) {
close(0); dup(src_fd);
}
if (i+1< c_cmd) {
close(1); dup(pfd[1]);
}
if ( execvp(argv[0], argv) < 0) exit(1);
}
close(pfd[1]);
src_fd = pfd[0];
}
while( (pid=wait(&i)) > 0) { if (i) err = 1; }
return err;
}
Michael Lehn
1999-05-06