AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 525243
Accepted
dercolamann
dercolamann
Asked: 2019-06-17 02:22:57 +0800 CST2019-06-17 02:22:57 +0800 CST 2019-06-17 02:22:57 +0800 CST

Por que não há syscalls de inserção de arquivos

  • 772

No meu entendimento, para manipular arquivos existe apenas o sys_write syscall no Linux, que sobrescreve o conteúdo do arquivo (ou o estende, se no final).

Por que não há syscalls para inserir ou excluir conteúdo em arquivos no Linux?

Como todos os sistemas de arquivos atuais não exigem que o arquivo seja armazenado em um bloco de memória contínuo, uma implementação eficiente deve ser possível. (Os arquivos ficariam fragmentados.)

Com recursos do sistema de arquivos como "copiar na gravação" ou "compactação transparente de arquivos", a maneira atual de inserir conteúdo parece ser muito ineficiente.

files file-copy
  • 2 2 respostas
  • 1833 Views

2 respostas

  • Voted
  1. Best Answer
    mosvy
    2019-06-17T04:45:21+08:002019-06-17T04:45:21+08:00

    Em sistemas Linux recentes isso é realmente possível, mas com bloco (4096 na maioria das vezes), não granularidade de bytes , e apenas em alguns sistemas de arquivos (ext4 e xfs).

    Citando da página de fallocate(2)manual:

    int fallocate(int fd, int mode, off_t offset, off_t len);

    [...]

    Recolher espaço de arquivo

    Especificar o FALLOC_FL_COLLAPSE_RANGEsinalizador (disponível desde o Linux 3.15) moderemove um intervalo de bytes de um arquivo, sem deixar um buraco. O intervalo de bytes a ser recolhido começa em offsete continua por len bytes. Na conclusão da operação, o conteúdo do arquivo que começa no local offset+lenserá anexado ao local offsete o arquivo será lenbytes menor.

    [...]

    Aumentando o espaço do arquivo

    Especificar o FALLOC_FL_INSERT_RANGEsinalizador (disponível desde o Linux 4.1) modeaumenta o espaço no arquivo inserindo um buraco no tamanho do arquivo sem substituir nenhum dado existente. O buraco começará em offsete continuará por lenbytes. Ao inserir o furo dentro do arquivo, o conteúdo do arquivo que começa em offsetserá deslocado para cima (ou seja, para um deslocamento de arquivo mais alto) por lenbytes. A inserção de um furo dentro de um arquivo aumenta o tamanho do arquivo em lenbytes.

    • 22
  2. ilkkachu
    2019-06-17T07:58:33+08:002019-06-17T07:58:33+08:00

    Como todos os sistemas de arquivos atuais não exigem que o arquivo seja armazenado em um bloco de memória contínuo,

    Os sistemas de arquivos podem não exigir que os arquivos sejam armazenados em uma área contínua (e isso seria muito inflexível), mas geralmente os arquivos são armazenados em blocos de tamanho fixo (ou sequências de blocos contíguos). Fazer isso dessa maneira simplifica a implementação e os blocos geralmente são múltiplos do tamanho do bloco do dispositivo subjacente.

    Portanto, implementar inserções de blocos com comprimento arbitrário tornaria o formato e a implementação do sistema de arquivos bastante mais complexos ou exigiria a movimentação de grandes quantidades de dados. Nenhum deles é realmente bom, e estruturas de dados complexas podem ser construídas no espaço do usuário em cima da API do sistema de arquivos.

    • 9

relate perguntas

  • Remova arquivos com os menores sufixos de nome de arquivo

  • Listar arquivos classificados de acordo com a linha de conteúdo específica

  • Como saber antecipadamente se um .zip tem um diretório pai dentro

  • Como encontrar tipos de arquivos específicos e tar-los?

  • du/df e ls relatando diferentes usos de disco

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve