Jump to content
riotx

programare in linux

Recommended Posts

Posted

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.

Posted
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.

Posted

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...

Posted
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);

}

}

Posted (edited)

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
Posted

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.

Posted

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.

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...