Lettura del file durante la scrittura su linux

7

Come ho capito, quando un file viene scritto, il processo di scrittura sul file ottiene un blocco esclusivo. Quindi altri processi non possono accedere a questo file per leggere.

Con la conoscenza di cui sopra, non sono in grado di capire come sono in grado di riprodurre un video nel lettore multimediale, quando il browser lo sta ancora scaricando.

    
posta Sorter 27.06.2015 - 10:38
fonte

3 risposte

10

La tua comprensione è sbagliata. Diversi processi di Linux possono scrivere sullo stesso file contemporaneamente (e ciò che accade potrebbe non essere specificato, tranne quando i processi sovrascrivono diversi segmenti di quel file). E qualche altro processo Linux (ad esempio il tuo browser) può leggere un file scritto in .

Potresti adottare una convenzione per evitare che . Ad esempio, potresti utilizzare il blocco dei file (adotta la convenzione secondo cui ogni programma pertinente dovrebbe farlo), ad es. con flock (2) , lockf(3) , ecc .... Ma ciò non impedirà ad altri processi (non seguendo le convenzioni) di accedere (o anche scrivere a) quel file. Puoi utilizzare un meccanismo di autorizzazione (ad esempio dedicando un utente di sistema al tuo setuid programma).

Vedi anche questo & che risponde su StackOverflow (alcuni dei quali menzionavano i meccanismi specifici di blocco obbligatorio di Linux deprecati). Leggi le proprietà ACID , valuta l'utilizzo di alcuni database ( sqlite , PostGreSQL , MongoDB , ecc ... ) o alcuni file indicizzati ( gdbm ).

Non conosco Windows, ma ho sentito dire che non consente accessi o scritture contemporanee allo stesso file.

    
risposta data 27.06.2015 - 12:39
fonte
4

I file di solito non sono bloccati - blocco file unix . È anche abbastanza comune avere più lettori di file ma solo uno scrittore. I problemi si verificano solo quando si hanno più scrittori.

Inoltre, la maggior parte dei formati di file video (e in particolare sul web) sono scorrevoli, il che significa che non è necessario che l'intero video sia riprodotto.

    
risposta data 27.06.2015 - 11:37
fonte
2

I sistemi operativi Unix non usano il blocco obbligatorio (Gnu / Linux è un Unix, altri esempi sono UNIX, BSD, Mac OSX). Bloccando come evitato dove mai possibile.

Alcuni altri sistemi operativi utilizzano sempre il blocco obbligatorio (in particolare il sistema operativo Windows di Microsoft). Questo ti impedirà di giocare fino al completo download, inoltre ti impedirà di rinominare un file o una directory aperta (in cui è presente un'applicazione). Ma su Unix è OK. Se un'applicazione ha bisogno di essere bloccata, può usarla. Ma non normalmente.

    
risposta data 27.06.2015 - 15:15
fonte

Leggi altre domande sui tag