Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    87

    [C o Java] Lettori e scrittori

    Ciao geni!

    So già che rischio di passare per un pigrone... :master:
    Qualcuno ha del codice per affrontare/risolvere il problema in oggetto?

    Thanks!
    Ciao ciao!
    vlr

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    87
    Ti ringrazio ma era la prima cosa che avevo fatto e la cosa non mi ha granché soddisfatto...
    Ciao ciao!
    vlr

  4. #4
    mi spiace.. li ho sul libro gli algoritmi..

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    In Java...

    Lettore:
    codice:
    import java.io.*;
    
    public class Lettore extends Thread {
    
       private Buffer buffer;
       private String nomeFile;
       private BufferedReader br;
    
       public Lettore(Buffer buffer, String nomeFile) {
          try {
             this.buffer = buffer;
             this.nomeFile = nomeFile;
             br = new BufferedReader( new InputStreamReader( new FileInputStream(nomeFile)) );
          } catch (Exception e) {}
       }
    
       public void run() {
          try {
             System.out.println("Inizio lettura file...");
             String linea;
             while ((linea = br.readLine()) != null) {
                buffer.scrivi(linea);
             }
             buffer.disattiva();
             System.out.println("Fine lettura file");
          } catch (Exception e) {}
       }
       
    }
    Scrittore:
    codice:
    import java.io.*;
    
    public class Scrittore extends Thread {
    
       private Buffer buffer;
       private String nomeFile;
       private PrintStream ps;
    
       public Scrittore(Buffer buffer, String nomeFile) {
          try {
             this.buffer = buffer;
             this.nomeFile = nomeFile;
             ps = new PrintStream( new FileOutputStream(nomeFile) );
          } catch (Exception e) {}
       }
    
       public void run() {
          try {
             System.out.println("Inizio scrittura file...");
             String linea;
             while ((linea = buffer.leggi()) != null) {
                ps.println(linea);
             }
             ps.close();
             System.out.println("Fine scrittura file");
          } catch (Exception e) {}
       }
       
    }
    Buffer:
    codice:
    public class Buffer {
       private String [] linee = new String[5];  // Memorizzo al massimo 5 linee alla volta
       private int primaLineaLibera;
       private int primaLineaDaPrendere;
       private int numLinee;
       private boolean attivo;
    
       public Buffer() {
          primaLineaLibera = primaLineaDaPrendere = numLinee = 0;
          attivo = true;
       }
    
       public synchronized void scrivi(String linea) {
          while (numLinee == 5) {
             try {
                wait();
             } catch (Exception e) {}
          }
          linee[primaLineaLibera] = linea;
          primaLineaLibera = (primaLineaLibera + 1) % 5;
          numLinee++;
          notifyAll();
       }
    
       public synchronized String leggi() {
          String tmp = null;
          if (attivo || (numLinee > 0)) {
             while (numLinee == 0) {
                try {
                   wait();
                } catch (Exception e) {}
             }
             tmp = linee[primaLineaDaPrendere];
             primaLineaDaPrendere = (primaLineaDaPrendere + 1) % 5;
             numLinee--;
             notifyAll();
          }
          return tmp;
       }
    
       public void disattiva() { attivo = false; }
    }
    Il programma principale:
    codice:
    public class Copia {
       public static void main(String [] args) {
          Buffer b = new Buffer();
          Lettore l = new Lettore(b, args[0]);
          Scrittore s = new Scrittore(b, args[1]);
          l.start();
          s.start();
       }
    }
    Come si usa:
    codice:
    $ java Copia {fileSorgente} {fileDestinazione}
    
    {fileSorgente}: un file di testo
    {fileDestinazione}: il nome del file da creare contenente la copia del file Sorgente
    Dovrebbe funzionare...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    87
    Originariamente inviato da LeleFT
    In Java...

    [...]

    Dovrebbe funzionare...

    Ciao.
    SEI UN MITO!!!!
    Ciao ciao!
    vlr

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    87
    Ritorno sul problema... non è che qualcuno ha qualcosa sempre su lettori/scrittori ma che utilizzi i semafori e in Java?

    Thanks!
    Ciao ciao!
    vlr

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.