Che cos'è un file?


9

Sto cercando una definizione formale di file che non includa solo l'archiviazione, ma anche astrazioni come procfs o / dev / null (o qualsiasi file basato su fusibili) che non si riferiscono all'archiviazione.

Finora so che tutti i file sono astrazioni che

  • può essere identificato
  • può avere nomi (di solito organizzati in strutture gerarchiche)
  • è possibile accedervi come flusso di byte
  • di solito forniscono autorizzazioni e altri metadati (specifici del sistema)

tuttavia non sono riuscito a trovare alcuna definizione formale utile in nessun libro del sistema operativo che ho letto finora.


hai guardato inode?
Bhaskar,

1
Direi che cose come / dev / null non sono affatto file ma, piuttosto, sono hack che ci consentono di accedere a cose non file come se fossero file. Inoltre, non mi è chiaro cosa intendi per "formale". All'interno di quale formalismo?
David Richerby,

"Un file è qualcosa che può essere aperto con fopen"?
adrianN,

@DavidRicherby qualsiasi astrazione software che si comporta esattamente come un file è un file: possiamo solo definire entità software in termini di comportamento. Per quanto riguarda il formalismo, sto cercando qualcosa di rigoroso dal punto di vista del CS. Ad esempio, abbiamo una definizione formale di per macchine da banco.
Giacomo Tesio,

Diversi sistemi operativi attribuiscono diverse operazioni ai file, vedere ad esempio * nix vs Windows. Si può provare a trovare un terreno comune, ma non sarà preciso. Inoltre, in CS si parla raramente di file - penso che ciò avvenga solo quando si progetta un sistema operativo, un filesystem, forse un DBMS, o in alcuni algoritmi su disco (ad es. Ordinamento-unione). (e pochi altri)
chi

Risposte:


6

Secondo Wikipedia, un file del computer è semplicemente una risorsa per la memorizzazione di informazioni. Il termine sembra aver avuto origine nell'era delle schede perforate, in cui un programma per computer era letteralmente memorizzato in un file (come in, una scatola utilizzata per memorizzare pagine sciolte, vedi immagine sotto). Man mano che venivano introdotte altre forme di media, come i dischi, seguiva la nomenclatura.

Dal punto di vista * nix, tutto è un file: socket, dispositivi, terminali, schermi / monitor, file di dati, pipe e così via. Microsoft Windows, al contrario, tende a chiamare "file" di dati di archiviazione permanenti e risorse volatili come sono, come pipe, socket, dispositivi raster, ecc. Altri sistemi possono avere definizioni simili da qualche parte tra questi due estremi.

Sfortunatamente, come ho appena affermato, non esiste un'unica definizione di cosa sia un file, perché è qualcosa di diverso per persone diverse, tranne per il fatto che tutti tendono a concordare sulla definizione di base che un file è una risorsa denominata che memorizza i dati su supporti permanenti (permanente non implica che non possa mai essere modificato, semplicemente che persiste attraverso cicli di accensione).

Punch Card File]( Wikipedia )


Ho letto la definizione di Wikipedia, ma è troppo focalizzata sulla memorizzazione. Come detto, sto cercando una definizione che copra file come / dev / null, che non memorizzano dati.
Giacomo Tesio,

@GiacomoTesio I due punti che stavo cercando di fare sono (a) file significa cose diverse per autori diversi, anche se i file (b) sono almeno universalmente definiti come risorse. NUL e / dev / null sono risorse speciali, perché in realtà non memorizzano nulla, ma sono comunque risorse. Una risorsa è semplicemente qualcosa che può trasmettere o ricevere dati (o entrambi). La definizione di un file di un libro del sistema operativo generico dipenderà dal punto di vista dell'autore.
phyrfox,

2

Penso a un file come a una sequenza di byte. Anche dopo che perde il suo nome (di solito causato da una chiamata a rm, che lo scollega), esiste ancora sul disco fino a quando i suoi blocchi non vengono sovrascritti da altre cose. I formati di file sono contesti per la lettura di file. Tutto risale al principio secondo cui le informazioni sono byte più contesto.

Il poster precedente ha ragione sul fatto che i dispositivi, pur essendo trattati come file, non sono in realtà file. Questo è un trucco molto utile.

Quindi la mia definizione di un file: una sequenza di byte archiviati in memoria.


2
"Quindi la mia definizione di un file: una sequenza di byte." è una sequenza di (diciamo, UTF-8) byte. È un file?
reinierpost,

Stiamo parlando di astrazioni di software, tutto ciò che si comporta esattamente come un file è un file. In realtà non possiamo definire alcuna entità software se non dal suo comportamento.
Giacomo Tesio,

"Penso a un file come a una sequenza di byte." Questa non è l'unica definizione di "filesystem". Vedi, ad esempio, en.wikipedia.org/wiki/Record-oriented_filesystem
Pseudonimo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.