[so] [TEMA2][WIN] Problema Exit
Adrian-Gabriel MICLE
adrian.micle at cti.pub.ro
Sat Apr 7 20:00:12 EEST 2012
Se repornesc in adevaratul sens al cuvantului.
Am pus _imediat_ dupa declararea variabilelor afisarea unui text (si in gateway, si in server). Dupa ce rulez din cygwin clientul cu "exit" se fac acele afisari, ca si cum s-ar fi inchis si ar fi repornit din nou. Acest lucru se intampla fix de 6 ori. A 6-a oara chiar se inchid.
int main (int argc, char * argv[]) {
// Declaratii
printf("Pornire GW\n");
fflush(stdout);
// Operatii de deschidere/creare mailsloturi
while (1) {
// Citire cmd din "\\.\mailslot\gateway"
if (.....) {
......
break;
} //endif
// Alte operatii
} //endwhile
// Operatii de cleanup
return 0;
} //endmain
Sunt sigur ca nu am multiple while-uri si mesajele _sunt_ primite, in sensul ca tema este perfect functionala, mai putin exit-ul asta. Checker-ul trece, in functia check_test(), de partea cu:
wait ${clients_pids[$client]} > $LOG_FILE 2>&1
Dar se agata, in aceeasi functie, din cauza:
wait $srv > $LOG_FILE 2>&1
________________________________________
From: so-bounces at cursuri.cs.pub.ro [so-bounces at cursuri.cs.pub.ro] on behalf of Razvan Crainea [razvan.crainea at gmail.com]
Sent: Saturday, April 07, 2012 7:34 PM
To: Sisteme de Operare
Subject: Re: [so] [TEMA2][WIN] Problema Exit
2012/4/7 Adrian-Gabriel MICLE <adrian.micle at cti.pub.ro>:
> Salut!
>
> Am o mica problema. Gateway-ul meu citeste intr-un ciclu while comenzi din mailslot-ul in care scriu clientii. Totul merge fain frumos pana cand se primeste comanda exit. Pentru tratarea acesteia folosesc urmatoarea secventa:
>
> if (strncmp(cmd.name, "exit", 4) == 0) {
> /*
> * foreach server:
> * send exit;
> */
> break;
> }
>
> In urma iesirii din while se fac operatiile de cleanup si apoi return. Insa, programele, in loc sa se opreasca, se repornesc. Trebuie sa dau "exit" de vreo 6 ori ca sa-mi iasa efectiv.
>
> Intuieste cineva care ar putea fi problema?
>
Salut, Gabriel!
În ce sens se repornesc, se execută din nou programul? Ești sigur ca
if-ul respectiv nu este în două bucle:
while (cond1) {
...
while (cond2) {
...
if (...){
}
}
}
--
Răzvan Crainea
_______________________________________________
http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii
More information about the so
mailing list