O que é um arquivo?


9

Estou procurando uma definição formal de arquivo que não inclua apenas armazenamento, mas também abstrações como procfs ou / dev / null (ou qualquer arquivo baseado em fusível) que não estejam relacionadas ao armazenamento.

Até agora eu sei que todos os arquivos são abstrações que

  • pode ser identificado
  • pode ter nomes (geralmente organizados em estruturas hierárquicas)
  • pode ser acessado como um fluxo de bytes
  • geralmente fornecem permissões e outros metadados (específicos do sistema)

no entanto, não consegui encontrar nenhuma definição formal útil em nenhum livro do SO que li até agora.


você olhou para inodes?
Bhaskar

11
Eu diria que coisas como / dev / null não são arquivos, mas são hacks que permitem acessar coisas que não são arquivos, como se fossem arquivos. Além disso, não está claro para mim o que você quer dizer com "formal". Dentro de que formalismo?
David Richerby

"Um arquivo é algo que pode ser aberto com fopen"?
precisa saber é o seguinte

@DavidRicherby qualquer abstração de software que se comporte exatamente como um arquivo é um arquivo: só podemos definir entidades de software em termos de comportamento. Quanto ao formalismo, estou procurando algo rigoroso da perspectiva do CS. Temos uma definição formal de máquinas de turing, por exemplo.
Giacomo Tesio

Sistemas operacionais diferentes atribuem operações diferentes a arquivos, veja, por exemplo, * nix vs Windows. Pode-se tentar encontrar um terreno comum, mas não será preciso. Além disso, no CS, raramente se fala em arquivos - acho que isso é feito apenas ao projetar um sistema operacional, um sistema de arquivos, talvez um DBMS ou em alguns algoritmos em disco (por exemplo, classificação e mesclagem). (e alguns outros)
chi

Respostas:


6

Segundo a Wikipedia, um arquivo de computador é simplesmente um recurso para armazenar informações. O termo parece ter se originado na era do cartão perfurado, onde um programa de computador estava literalmente armazenado em um arquivo (como em uma caixa usada para armazenar páginas soltas, veja a imagem abaixo). À medida que outras formas de mídia foram introduzidas, como discos, a nomenclatura se seguiu.

Do ponto de vista do * nix, tudo é um arquivo: soquetes, dispositivos, terminais, telas / monitores, arquivos de dados, tubos e assim por diante. O Microsoft Windows, por outro lado, tende a chamar "arquivos" de dados de armazenamento permanente e recursos voláteis, sejam eles quais forem, como pipes nomeados, soquetes, dispositivos raster, etc. Outros sistemas podem ter definições semelhantes em algum lugar entre esses dois extremos.

Infelizmente, como acabei de afirmar, não há uma definição única do que é um arquivo, porque é diferente para pessoas diferentes, exceto que todos tendem a concordar com a definição de linha de base de que um arquivo é um recurso nomeado que armazena dados em mídia permanente (permanente não implica que nunca possa ser modificado, simplesmente que persiste nos ciclos de energia).

Arquivo de cartão perfurado]( Wikipedia )


Eu li a definição da wikipedia, mas ela é muito focada no armazenamento. Como afirmado, estou procurando uma definição que cubra arquivos como / dev / null, que não armazenam dados.
Giacomo Tesio

@GiacomoTesio Os dois pontos que eu estava tentando destacar são (a) arquivo significa coisas diferentes para autores diferentes, embora (b) arquivos sejam pelo menos universalmente definidos como recursos. NUL e / dev / null são recursos especiais, porque na verdade não armazenam nada, mas são recursos. Um recurso é simplesmente algo que pode transmitir ou receber dados (ou ambos). A definição de um arquivo genérico de um livro do SO dependerá do ponto de vista do autor.
Phyrfox

2

Penso em um arquivo como uma sequência de bytes. Mesmo depois de perder o nome (geralmente causado por uma chamada à rm, que o desassocia), ele ainda existe no disco até que seus pedaços sejam substituídos por outras coisas. Formatos de arquivo são contextos para a leitura de arquivos. Tudo volta ao princípio de que informações são bytes mais contexto.

O pôster anterior está certo de que os dispositivos, embora sejam tratados como arquivos, não são realmente arquivos. Este é um hack muito útil.

Então, minha definição de arquivo: uma sequência de bytes armazenados na memória.


2
"Então, minha definição de arquivo: uma sequência de bytes." é uma sequência de (digamos, UTF-8) bytes. É um arquivo?
Reinierpost

Estamos falando de abstrações de software, qualquer coisa que se comporte exatamente como um arquivo é um arquivo. Na verdade, não podemos definir nenhuma entidade de software, exceto pelo seu comportamento.
Giacomo Tesio

"Penso em um arquivo como uma sequência de bytes." Essa não é a única definição de "sistema de arquivos". Veja, por exemplo, en.wikipedia.org/wiki/Record-oriented_filesystem
Pseudônimo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.