Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c++] Apertura multipla di un file (e scrittura)

    Buon giorno a tutti (e buon anno)...
    Vorrei sapere cosa può scaturire dall'apertura di un file, da parte di applicazioni diverse, contemporaneamente....
    So che se aperto in lettura, da più programmi, non succede nulla di significativo, ma se invece viene aperto in scrittura o in append ? e se successivamente all'apertura, segue una scrittura, sempre da parte di più applicazioni contemporaneamente (lo so che è fisicamente improbabile) ?
    Cosa succede o può succedere, come rispondono SO e applicazione ad una richiesta simile?
    Inoltre come si può evitare ?

    Ringrazio chiunque mi risponderà
    Experience is what you get when you don’t get what you want

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Aprire lo stesso file (e scriverci sopra) da processi differenti è perfettamente possibile. Quale sia il risultato sul file .... non lo so , dipende da dove e dal preciso momento in cui vengono fatte le scritture.

    Questa ovviamente non è una buona cosa. La soluzione è quella di "lockare" il file, cosa che però dipende dal sistema operativo. Cioè non ci sono funzioni "standard" e "portabili" per effettuare il lock sui file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Ma ci possono essere effetti collaterali su file differenti da quello in questione, o magari strani comportamenti che il sistema operativo (sia windows che linux, altri nn ne uso) possono adottare, a riguardo?
    Experience is what you get when you don’t get what you want

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Secondo me non ci sono controindicazioni. Sia la lettura che la scrittura puntano ad una precisa posizione di memoria, in caso di traffico esiste comunque un buffer che accoda i dati, quando uno stream ha finito di leggere l'altro inizia a scrivere e viceversa. Non è che i dati rischiano di finire in altre posizioni per sovraccarico del bus, questo non dovrebbe essere possibile.

    Il più sta nel come è scritto il codice di questi applicativi, nelle loro priorità e protezioni di lettura/scrittura e di ricaricamento del file qualora venga modificato da un altro applicativo. Questo normalmente avviene per i file di testo, esistono editors (quelli buoni) che aggiornano automaticamente in tempo reale il file caricato qualora venisse modificato da una fonte esterna.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da Paulin
    Secondo me non ci sono controindicazioni. Sia la lettura che la scrittura puntano ad una precisa posizione di memoria, in caso di traffico esiste comunque un buffer che accoda i dati, quando uno stream ha finito di leggere l'altro inizia a scrivere e viceversa. Non è che i dati rischiano di finire in altre posizioni per sovraccarico del bus, questo non dovrebbe essere possibile.
    Se un file deve essere aggiornato contemporaneamente da più processi, bisogna per forza di cose operare con dei lock sul file (o su una sua parte).

    Originariamente inviato da Paulin
    Il più sta nel come è scritto il codice di questi applicativi, nelle loro priorità e protezioni di lettura/scrittura e di ricaricamento del file qualora venga modificato da un altro applicativo. Questo normalmente avviene per i file di testo, esistono editors (quelli buoni) che aggiornano automaticamente in tempo reale il file caricato qualora venisse modificato da una fonte esterna.
    Questa funzionalità degli editor non c'entra nulla con i lock, concorrenza in scrittura o cose simili. Semplicemente l'editor si "tiene" in memoria la data/ora dell'ultima modifica sul file. Quando l'editor ad esempio riprende il focus e scopre che la data/ora è diversa da quella che ha memorizzato, allora capisce che il file è stato modificato da un altro processo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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.