[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