riotx Posted October 13, 2010 Report Posted October 13, 2010 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. Quote
Zamolxis666 Posted October 13, 2010 Report Posted October 13, 2010 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. Quote
Xander Posted October 13, 2010 Report Posted October 13, 2010 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 ununsigned char z[lungime+1] si copiezi raspunsul in bufferu asta si il trimiti la procesul tata... Quote
Zamolxis666 Posted October 14, 2010 Report Posted October 14, 2010 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 ununsigned 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); }} Quote
riotx Posted October 14, 2010 Author Report Posted October 14, 2010 (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 October 15, 2010 by riotx Quote
mode Posted October 16, 2012 Report Posted October 16, 2012 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 fiucomenzile sunt siruri de caractere delimitate de new lineraspunsurile sunt siruri de octeti prefixate de lungimea raspunsuluiprotocolul 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.lsquitComunicarea intre procese se va face pe baza unui mecanism de comunicare cunoscut. Quote
ionut.hulub Posted October 17, 2012 Report Posted October 17, 2012 asta e tema pentru saptamana viitoare la FII.lasat'i sa o faca singuri. Quote
ionut.hulub Posted October 17, 2012 Report Posted October 17, 2012 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 = bytechar = 1 byte=> sir de octeti = sir de bytes => sir de octecti = sir de caracterein 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. Quote
mode Posted October 21, 2012 Report Posted October 21, 2012 Daca tot este tema la FII .. nu poti sa dai niste indicatii? Quote
ionut.hulub Posted November 10, 2012 Report Posted November 10, 2012 (edited) luati de va bucuratiTema 1 retelesuporta orice comanda cu oricate argumente. Edited November 10, 2012 by ionut.hulub Quote