Mam ulohu implementovat vlastne rury v jazyku C.. po zadani prikazu proces rurka proces2 rurka proces3 by sa mali vykonat za sebou bash skripty.. prikaz ej ekvivalent proces|proces2|proces3 kod vyzera nasledovne
void sprav(char* proces)
{
int status;
int pocet = 0; // pocet procesov aby som vedel kolko rur treba vytvorit(deskriptorov)
int pid;
char ahoj[50] = "/home/lasok/";
int i = 0;
int l = 0;
int z = 0;
int q = 0;
q=(i*2);
while(proces[q] != NULL)
{
pocet++;
i++;
q=(i*2);
}
if(pocet == 0)
{
printf("Nie je zadany ziadny proces\n");
error(1);
}
pocet--;
int piped[(pocet)*2]; //pri kazdej potrebujem jeden na read a jeden na write
for(l = 0; l < (pocet); l++){ //vytvori deskriptory
if(pipe(piped + l*2) < 0) {
perror("error");
exit(1);
}
}
pocet++;
int c = 0;
int g = 0;
q = 0;
while(g<pocet)
{
pid = fork();
if(pid == 0)
{
if((g+1) != pocet) //nie je posledny prikaz
{
if(dup2(piped[c + 1], 1) < 0){
perror("errorDup2");
exit(1);
}
}
if(c != 0) //nie je prvy prikaz
{
if(dup2(piped[c-2], 0) < 0){
perror("dup2");
exit(1);
}
}
for(i = 0; i < 2*(pocet-1); i++){
close(piped[i]);
}
strcat(ahoj,proces[q]);
if( execvp(ahoj,proces[q]) < 0 ){
printf("Chyba pri spustani skriptu\n");
error(1);
}
memset(ahoj,NULL,sizeof(ahoj));
strcpy(ahoj,"/home/lasok/");
}else if(pid < 0){
printf("Zlyhal fork\n");
error(1);
}
z++;
q=(z*2);
g++;
c+=2;
}
for(i = 0; i < 2 * pocet; i++){
close(piped[i]);
}
for(i = 0; i < pocet + 1; i++)
wait(&status);
}
parameter proces(su v nom olozene nazvy skriptov).. nech mu zadam hocijaky nazov vobec to nepadne vlatne nespravi nic.. neviem kde mam chybua tak chcem poprosit dakoho ci by mi s tym pomohol