Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 24 su 24

Discussione: [C] named pipe

  1. #21
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Intendi questo?

    codice:
    while (1) {
            if (read (fdf, richiesta, 15) > 0) {
                    printf ("%s\n", richiesta);
            } else if (read (fdf, richiesta, 15) == -1) {
                    printf ("\n Errore \n");
            }
    }
    In quel caso il server non si blocca sulla read(), semplicemente all'inizio legge 15 byte e ti stampa richiesta, poi dalla seconda iterazione in poi, poiché legge sempre 0 (come ti dicevo...) non esegue né il corpo del primo if né quello del secondo. L'impressione è quella di un blocco sulla read() ma in realtà non sta facendo altro che ciclare all'infinito, ripetendo delle read() a raffica che restituiscono sempre 0 perché nient'altro possono restituire :°D

    Tant'è che se modifichi così...

    codice:
    while (1) {
            if (read (fdf, richiesta, 15) > 0) {
                    printf ("%s\n", richiesta);
            } else if (read (fdf, richiesta, 15) == -1) {
                    printf ("\n Errore \n");
            } else if (read (fdf, richiesta, 15) == 0){
                    printf("lol\n");
            }
    }
    avrai un infinità di lol stampati a video. Che poi non serve ripetere 3 volte la read(), basta una sola chiamata memorizzando il valore di ritorno in una variabile...
    every day above ground is a good one

  2. #22
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    ok grazie

    in questo modo pero' i processi client non dovrebbero terminare prima del server giusto? nella pratica come succede?

  3. #23
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Il client può anche terminare prima del server, anzi per certi versi *deve*, perché il server non può terminare fino a quando non ha soddisfatto le richieste del client (generalmente); il punto è che se il client termina il server deve saperlo in qualche modo, per questo puoi riscrivere il ciclo di lettura del server così:

    codice:
    ...
    while (read(fdf, richiesta, 15)) {
            printf("%s\n", richiesta);
    }
    ...
    in questo modo la read() legge fin quando ha qualcosa da leggere. Se il client ad un certo punto termina, la pipe viene chiusa in lettura e il server leggerà sempre 0 byte, uscendo quindi dal ciclo while.

    In realtà ci sarebbero poi da controllare eventuali errori e situazioni particolari per rendere il tutto più serio, ma vabbè.
    every day above ground is a good one

  4. #24
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    Grazie !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.