Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: [C] named pipe

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96

    [C] named pipe

    ciao a tutti !
    Non capisco l'output del mio codice:

    SERVER.C

    main ()
    {
    // CREO E APRO LE FIFO
    int fdf;
    mkfifo ("./fifo",0644); // creo la fifo per leggere richieste del client
    fdf = open ("./fifo",O_RDONLY); /* apre in sola lettura bloccante */
    char richiesta[15];

    while (1)
    {
    read (fdf, richiesta, 15);
    printf ("%s\n", richiesta);
    }
    }



    CLIENT.C

    main ()
    {
    int fdf;
    fdf = open ("./fifo",O_WRONLY); /* apre in sola scrittura bloccante */
    char s[15] = {"ciaoooooooooooo"};
    write (fdf, s, 15);
    }



    faccio partire il server e rimane in attesa sulla open .....
    faccio partire il client che scrive sulla pipe....

    mi aspetto che il server stampi quello che ha spedito e che poi si rimette in attesa sulla read
    invece mi stampa all'infinito "ciaooooo"

    perche'? :master:

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    read

    RETURN VALUES
    If successful, these functions return a non-negative integer that indicates the number of bytes read. The number of bytes read may be less than the number of bytes requested in any of the following conditions:

    . The number of bytes left in the file is less than the requested length.
    . The read() was interrupted by a signal.
    . The file is a pipe or FIFO or special device and has fewer bytes than requested immediately available for reading.

    On error, these functions return -1
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    nel mio caso la read ritorna con successo .....ma si dovrebbe bloccare fin quando non lancio un'altra vota il client .... giusto?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Originariamente inviato da rufuss
    nel mio caso la read ritorna con successo .....
    E come fai a saperlo? Nel tuo codice NON controlli cosa ritorna la read ... quindi ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Stampa il valore di ritorno della read() ad ogni iterazione e chiediti *perché* restituisce proprio quel valore, chiaramente dopo aver letto la documentazione relativa alla funzione.
    every day above ground is a good one

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    ok adesso verifico....ma se stampa quello che il client mi ha mandato deduco che la read ha letto con successo.... :master:

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Originariamente inviato da rufuss
    ok adesso verifico....ma se stampa quello che il client mi ha mandato deduco che la read ha letto con successo.... :master:
    Non dedurre ma segui la documentazione ... se la funzione ti restituisce un codice d'errore, quello che ottieni non è comunque valido, qualunque cosa sia ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    ho cambiato il while:

    while (1)
    {

    if (read (fdf, richiesta, 15) > 0)
    printf ("%s\n", richiesta);
    else
    if (read (fdf, richiesta, 15) == -1)
    printf ("\n Errore \n");
    }

    e cosi' mi funziona...mi stampa "ciaoooo" ogni volta che lancio il client....

    ma non capisco perche' prima stampava all'infinito .... se non controllo mi fa i scherzi se controllo si mette paura?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,476
    Originariamente inviato da rufuss
    ma non capisco perche' prima stampava all'infinito .... se non controllo mi fa i scherzi se controllo si mette paura?
    Non hai letto/compreso la documentazione ... né quello che ti ho scritto poco fa ...

    E comunque, la read va chiamata una sola volta, non due ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    96
    1)non capisco questo punto... The file is a pipe or FIFO or special device and has fewer bytes than requested immediately available for reading. sapresti aiutarmi ..il mio inglese e' un po carente

    2) prima ritornava sempre 0

    :master:

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 © 2024 vBulletin Solutions, Inc. All rights reserved.