Domanda

La strategia generale per il blocco dei file spinta (file_locks condivisibili e di ambito), e il blocco dei file in generale credo che, è questa:

  1. Apri
  2. blocco
  3. operare sul contenuto dei file
  4. Sblocca
  5. chiudere il file

Tuttavia, aprirà il file per l'accodamento e vuole chiamare tellp per vedere dove mi trovo. Questa funzione è sicura di fare nello scenario di cui sopra? non il puntatore del file essere impostata non appena il file viene aperto prima del blocco e quindi potenzialmente non protetto? Se è così, c'è un linguaggio standard per ottenere intorno a questo?

È stato utile?

Soluzione

Questo può essere l'ambiente specifico, ma sulla maggior parte delle piattaforme:

Quando un file viene aperto per l'accodamento il puntatore del file viene regolata immediatamente prima di ogni scrittura. Quindi, se si utilizza tellp prima di bloccare il file, potrebbe non dirvi dove i byte di recente annessi stanno per andare, ma non si devono avere due processi che utilizzano il blocco in qualche modo ancora aggiungendo la stessa gamma di byte.

Altri suggerimenti

Vi consiglio una buona documentazione spinta: http: //www.boost .org / doc / librerie / 1_45_0 / doc / html / tra processi / synchronization_mechanisms.html # interprocess.synchronization_mechanisms.file_lock

In cui si può leggere:

  • blocchi di file non funzionano sistema si blocca, anche se il sistema operativo lo supporta (ad esempio Windows sì, Unix-like di solito non), quindi se si blocca il file, chiunque può leggere / scrivere / cancellare, a meno che altro processo utilizza stesso file meccanismo di bloccaggio. Così pensarci più come mutex tra processi, piuttosto che le serrature reale dei file.
  • blocchi di file sono per la sincronizzazione tra processi, non sincronizzare thread multipli all'interno del processo
  • Non dimenticare di vampate di calore (il colore di ofstream), in modo da non dovete preoccuparvi di buffer

Oh, questo è semplicemente orribile ... volevo aiutare, ho scritto il codice di esempio, provare e ... come di 1_44 file di bloccaggio viene spezzato per win32, vampate di calore non funziona su file bloccato.

Siamo spiacenti, non è colpa mia.

Se aiuta, in teoria: se file aperto per l'aggiunta, significa auto-cercando di porre fine prima di ogni operazione di scrittura. Essa non impedisce di cercare manualmente alla fine ogni volta che vuoi - anche senza la scrittura. Tuttavia, l'esperienza (vedi sopra), dice:. Soggiorno lontano da cose rotte

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top