Jump to content
riotx

programare in linux

Recommended Posts

Implementati urmatorul protocol de comunicare intre doua procese:

o comunicarea se face prin executia de comenzi citite de la tastatura in procesul tata si executate in procesul fiu

o comenzile sunt siruri de caractere delimitate de new line

o raspunsurile sunt siruri de octeti prefixate de lungimea raspunsului

o protocolul cuprinde comenzile:

+ login: username (a carei existenta este validata prin verificarea fisierului /etc/passwd )

+ cd cale

+ ls

+ quit

In principiu stiu sa fac tot de acolo (si comunicare intre procesul tata si procesul fiu ). Ceea ce nu inteleg eu prea bine este linia :raspunsurile sunt siruri de octeti prefixate de lungimea raspunsului.Eu din procesul tata ii trimit comanda la proces fiu .Acesta o executa .Cum primesc eu raspunsurile sub forma de siruri de octeti prefixate de lungimea raspunsului.

Link to comment
Share on other sites

Implementati urmatorul protocol de comunicare intre doua procese:

o comunicarea se face prin executia de comenzi citite de la tastatura in procesul tata si executate in procesul fiu

o comenzile sunt siruri de caractere delimitate de new line

o raspunsurile sunt siruri de octeti prefixate de lungimea raspunsului

o protocolul cuprinde comenzile:

+ login: username (a carei existenta este validata prin verificarea fisierului /etc/passwd )

+ cd cale

+ ls

+ quit

In principiu stiu sa fac tot de acolo (si comunicare intre procesul tata si procesul fiu ). Ceea ce nu inteleg eu prea bine este linia :raspunsurile sunt siruri de octeti prefixate de lungimea raspunsului.Eu din procesul tata ii trimit comanda la proces fiu .Acesta o executa .Cum primesc eu raspunsurile sub forma de siruri de octeti prefixate de lungimea raspunsului.

Daca raspunsul este de tipul, sa zicem, "comanda executata cu succes", atunci prefixat cu lungimea sirului va arata asa: "27comanda executata cu succes" (cel putin asa inteleg eu din ce ai scris tu. Ca sa trimiti raspunsul inapoi in tata poti sa folosesti date partajate. Incerc sa ma gandesc si la o alta varianta.

Link to comment
Share on other sites

defapt raspunsu o sa fie ceva de genu

\x1B\xXX\xXX\xXX\xXX...

1B=27(lungimea) iar \xXX = bytes mai pe scurt (din pct de vedere al programarii) ai un

unsigned char z[lungime+1] si copiezi raspunsul in bufferu asta si il trimiti la procesul tata...

E bine cum zici tu. Uite o bucata de code, in ideea ca poate te ajuta:

char *result;

int cpid = fork();

if(cpid == 0) //daca ne aflam in copil

{

result = executaComanda(parametrii functiei);

exit(1); //iesim din copil;

}

.......

int status = 0;

if(result != NULL) //daca nu s-a intors rezultatul atunci asteapta dupa copil pana termina

{

cpid = wait(&status);

if(WIFEXITES(&status)) //daca copilul returneaza true inseamna ca si-a terminat

{ //executia in mod corect, apeland exit();

//si atunci il "omoram" si il "ingropam" sa nu devina zombie

kill(cpid, SIGKILL);

wait(NULL);

}

}

Link to comment
Share on other sites

Eu cand execut comanda respectiva trebuie sa folosesc o comanda ce returneaza ceva ca sa pot trimite apoi tatalui .Eu stiu doar de exec (execlp aici) care nu returneaza un rezultat.

Multumesc pt. raspunsurile de pana acuma .Chiar m-au ajutat.

Edited by riotx
Link to comment
Share on other sites

Buna. Puteti sa ma ajutati si pe mine cu urmatoarea problema?

Proiectati si implementati urmatorul protocol de comunicare intre procese:

comunicarea se face prin executia de comenzi citite de la tastatura in procesul tata si executate in procesele fiu

comenzile sunt siruri de caractere delimitate de new line

raspunsurile sunt siruri de octeti prefixate de lungimea raspunsului

protocolul minimal cuprinde comenzile:

login: username (a carei existenta este validata prin utilizarea unui fisier de configurare)

grep pattern nume_fisier

Rezultatul obtinut in urma executiei acestei comenzi este sumarizat de procesul(procesele fiu), in observatii de tipul: Nr de linii relevante este X. Acest rezultat va fi afisat de procesul tata.

ls

quit

Comunicarea intre procese se va face pe baza unui mecanism de comunicare cunoscut.

Link to comment
Share on other sites

In principiu stiu sa fac tot de acolo (si comunicare intre procesul tata si procesul fiu ). Ceea ce nu inteleg eu prea bine este linia :raspunsurile sunt siruri de octeti prefixate de lungimea raspunsului.Eu din procesul tata ii trimit comanda la proces fiu .Acesta o executa .Cum primesc eu raspunsurile sub forma de siruri de octeti prefixate de lungimea raspunsului.

Octet = byte

char = 1 byte

=> sir de octeti = sir de bytes => sir de octecti = sir de caractere

in fiu apelezi strlen(raspuns), unde raspuns o sa fie rezultatul comenzii, apoi concatenezi strlen(raspuns) la inceputul raspunsului si trimiti razultatul la parinte.

succes.

edit: app. poti folosi sprintf ca sa faci concatenarea mai usor.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...