Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
char *arg[]={"ls","wc","f.res"};
void StartExec( char* name)
{
if( fork() == 0 )
{
execlp( name, name, 0 );
}
}
void StartAll( int argc, char* argv[] )
{
int i, fd[2], in,f_des, out;
int buf1, buf2;
in = dup(0);
buf1 = dup(0);
buf2 = dup(1);
for( i = 0; i < argc - 2; i++ )
{
pipe( fd );
out = fd[1];
dup2(in,0);
dup2(out,1);
close(in);
close(out);
StartExec( argv[i]);
in = fd[0];
}
dup2(in,0);
close(1);
// f_des=open(argv[i+1],O_WRONLY|O_APPEND,0777);
f_des=open(argv[i+1],O_WRONLY|O_CREAT|O_TRUNC,0666);
StartExec(argv[i]);
dup2(buf2,1);
dup2(buf1,0);
}
main()
{
int narg=3;
pid_t pid1,pid2;
int fd1,fd2;
switch (pid1=fork())
{
case 0:
close(0);
// close(1);
fd1=open("f.dat",O_RDONLY);
// fd2=open("f.res",O_WRONLY|O_CREAT|O_TRUNC,0666);
execl("/bin/cat","cat","-b",(char *)0);
//-----------------------------
default:
wait((int *)0);
StartAll(narg,arg);
}
}