Anonymní profil Jozef – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jozef – Programujte.comAnonymní profil Jozef – Programujte.com

 

Příspěvky odeslané z IP adresy 178.41.161.–

Jozef
C / C++ › Implementacia vlastnych rur…
3. 1. 2013   #169727

ostatok som poopravoval. prepacte som tu novy. ono 2 roky sa ucim v jave a naraz potrebujem takuto vec spravit preto mam s tym vela problemov. cast ktora je chybna je od toho "while(g<pocet)" do konca kde vobec tie rury nejdu pre tie procesy.. opraveny je aj exec ked psutim viac ako ejden script tak nepusti vobec nic.. a prestudoval som o tych rurach dost ale stale nemozem tomu poriadne pochopit

Jozef
C / C++ › Implementacia vlastnych rur…
3. 1. 2013   #169717

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 

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý