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 / 446237
Accepted
Harold Fischer
Harold Fischer
Asked: 2018-05-27 16:55:14 +0800 CST2018-05-27 16:55:14 +0800 CST 2018-05-27 16:55:14 +0800 CST

Quais condições devem ser atendidas para que um arquivo seja um arquivo de texto conforme definido pelo POSIX?

  • 772

O POSIX define um arquivo de texto como:

Um arquivo que contém caracteres organizados em zero ou mais linhas. As linhas não contêm caracteres NUL e nenhuma pode exceder {LINE_MAX} bytes de comprimento, incluindo o caractere <nova linha>. Embora o POSIX.1-2017 não faça distinção entre arquivos de texto e arquivos binários (consulte o padrão ISO C), muitos utilitários produzem apenas uma saída previsível ou significativa ao operar em arquivos de texto. Os utilitários padrão que possuem tais restrições sempre especificam "arquivos de texto" em suas seções STDIN ou INPUT FILES.

Fonte: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403

No entanto, há várias coisas que não acho claras:

  1. Um arquivo de texto deve ser um arquivo normal? No trecho acima, não diz explicitamente que o arquivo deve ser um arquivo regular

  2. Um arquivo pode ser considerado um arquivo de texto se contiver um caractere e apenas um caractere (ou seja, um único caractere que não termine com uma nova linha)? Sei que essa pergunta pode parecer complicada, mas eles usam a palavra "caracteres" em vez de "um ou mais caracteres". Outros podem discordar, mas se eles querem dizer "um ou mais personagens", acho que deveriam dizer isso explicitamente

  3. No trecho acima, faz referência a "linhas". Encontrei quatro definições com linha em seu nome: "Linha Vazia", ​​"Linha de Exibição", "Linha Incompleta" e "Linha". Devo inferir que eles significam "Linha" por causa da omissão de "Vazio", "Exibir" e "Incompleto" - ou todas as quatro dessas definições são consideradas uma linha no trecho acima?

Todas as perguntas que vêm após este bloco de texto dependem da inferência de que "caracteres" significa "um ou mais caracteres":

  1. Posso inferir com segurança que, se um arquivo estiver vazio, não é um arquivo de texto porque não contém um ou mais caracteres?

Todas as perguntas que vêm após este bloco de texto dependem da inferência de que no trecho acima, uma linha é definida como "Linha", e que as outras três definições que contêm "Linha" em seu nome devem ser excluídas:

  1. O "zero" em "zero ou mais linhas" significa que um arquivo ainda pode ser considerado um arquivo de texto se contiver um ou mais caracteres que não sejam terminados com nova linha?

  2. "Zero ou mais linhas" significa que uma vez que uma única "Linha" (0 ​​ou mais caracteres mais uma nova linha de terminação) entra em jogo, torna-se ilegal que a última linha seja uma "Linha incompleta" (uma ou mais linhas não caracteres de nova linha no final de um arquivo)?

  3. "Nenhum [nenhuma linha] pode exceder {LINE_MAX} bytes de comprimento, incluindo o caractere de nova linha" significa que há uma limitação para o número de caracteres permitidos em qualquer "Linha" em um arquivo de texto (como um aparte, o valor de LINE_MAX no Ubuntu 18.04 e FreeBSD 11.1 é "2048")?

files posix
  • 2 2 respostas
  • 3190 Views

2 respostas

  • Voted
  1. Best Answer
    Michael Homer
    2018-05-27T17:22:51+08:002018-05-27T17:22:51+08:00
    1. Um arquivo de texto deve ser um arquivo normal? No trecho acima, não diz explicitamente que o arquivo deve ser um arquivo regular

      Não; o trecho até mesmo observa especificamente a entrada padrão como um arquivo de texto em potencial. Outros utilitários padrão, como o make, usam especificamente o arquivo especial de caracteres /dev/null como um arquivo de texto .

    2. Um arquivo pode ser considerado um arquivo de texto se contiver um caractere e apenas um caractere (ou seja, um único caractere que não termine com uma nova linha)?

      Esse caractere deve ser um <newline>, ou isso não é uma linha e, portanto, o arquivo em que está não é um arquivo de texto. Um arquivo contendo exatamente o byte 0A é um arquivo de texto de uma linha. Uma linha vazia é uma linha válida.

    3. No trecho acima, faz referência a "linhas". Encontrei quatro definições com linha em seu nome: "Linha Vazia", ​​"Linha de Exibição", "Linha Incompleta" e "Linha". Devo inferir que eles querem dizer "Linha" por causa da omissão de "Vazio", "Exibir" e "Incompleto"

      Não é realmente uma inferência, é apenas o que diz. A palavra "linha" recebeu uma definição contextualmente apropriada e é disso que ela está falando.

    4. Posso inferir com segurança que, se um arquivo estiver vazio, não é um arquivo de texto porque não contém um ou mais caracteres?

      Um arquivo vazio consiste em zero (ou mais) linhas e, portanto, é um arquivo de texto.

    5. O "zero" em "zero ou mais linhas" significa que um arquivo ainda pode ser considerado um arquivo de texto se contiver um ou mais caracteres que não sejam terminados com nova linha?

      Não, esses caracteres não são organizados em linhas.

    6. "Zero ou mais linhas" significa que uma vez que uma única "Linha" (0 ​​ou mais caracteres mais uma nova linha de terminação) entra em jogo, torna-se ilegal que a última linha seja uma "Linha incompleta" (uma ou mais linhas não caracteres de nova linha no final de um arquivo)?

      Não é ilegal , apenas não é um arquivo de texto. Um utilitário que exige que um arquivo de texto seja fornecido a ele pode se comportar de maneira adversa se for fornecido esse arquivo.

    7. "Nenhum [nenhuma linha] pode exceder {LINE_MAX} bytes de comprimento, incluindo o caractere de nova linha" significa que há uma limitação para o número de caracteres permitidos em qualquer "Linha" em um arquivo de texto

      Sim.

    Esta definição está apenas tentando definir alguns limites sobre o que um utilitário baseado em texto ( por exemplo,grep ) definitivamente aceitará — nada mais. Eles também são livres para aceitar as coisas de forma mais liberal, e muitas vezes o fazem na prática. Eles têm permissão para usar um buffer de tamanho fixo para processar uma linha, assumir que uma nova linha aparece antes de estar cheia e assim por diante. Você pode estar lendo muito nas coisas.

    • 30
  2. user232326
    2018-05-27T17:23:35+08:002018-05-27T17:23:35+08:00
    Bloqueado . Os comentários nesta resposta foram desativados, mas ainda está aceitando outras interações. Saiba mais .

    Conforme definido pelo POSIX:

    Sim, um arquivo de texto é (basicamente):

    Um arquivo que contém caracteres organizados em zero ou mais linhas.

    Seria útil incluir também estas definições:

    3.92 Cadeia de Caracteres

    Uma sequência contígua de caracteres terminada por e incluindo o primeiro byte nulo.

    3.195 Linha Incompleta

    Uma sequência de um ou mais caracteres não <nova linha> no final do arquivo.

    3.206 Linha

    Uma sequência de zero ou mais caracteres não <nova linha> mais um caractere <nova linha> de terminação.

    3.243 Caractere de nova linha (<nova linha>)

    Um caractere que no fluxo de saída indica que a impressão deve começar no início da próxima linha. É o caractere designado por '\n' na linguagem C. Não está especificado se este caractere é a sequência exata transmitida a um dispositivo de saída pelo sistema para realizar o movimento para a próxima linha.

    3.247 NUL

    Um caractere com todos os bits definidos como zero.

    Observe que um "arquivo de texto" não deve conter bytes NUL.


    Então:

    1. Um arquivo de texto deve ser um arquivo normal?
      Não, não precisa ser. Um "arquivo de texto" é definido em termos do que ele contém quando lido. Se um arquivo contém "zero ou mais linhas", é um arquivo de texto. Alguns arquivos, como /dev/stdin, podem conter um arquivo de texto se lidos de uma vez e não na próxima vez que forem lidos.
    2. Um arquivo pode ser considerado um arquivo de texto se contiver um caractere e apenas um caractere…?
      Não, essa é uma linha incompleta (3.195).
      Um arquivo de texto deve conter apenas "Linhas incompletas".
    3. Devo inferir que eles significam "Linha" …?
      Sim você deveria.
    4. Posso inferir com segurança que, se um arquivo estiver vazio, não é um arquivo de texto...?
      Não, um arquivo vazio (zero caracteres) é um "arquivo de texto" válido.
      De cima: …zero ou mais linhas… . Zero linhas (zero caracteres) é um "arquivo de texto" válido.
    5. … considerado um arquivo de texto se contiver um ou mais caracteres que não sejam terminados com nova linha?
      Não, uma "linha incompleta" não é (tecnicamente) uma "linha" válida.
    6. O "zero" em "zero ou mais linhas" significa que um arquivo ainda pode ser considerado um arquivo de texto se contiver um ou mais caracteres que não sejam terminados com nova linha?
      Não, uma linha incompleta não é uma "Linha". Um arquivo de texto não deve ter linhas incompletas.

    7. … há uma limitação no número de caracteres permitidos em qualquer "Linha" em um arquivo de texto … ?
      Sim, não mais do que {LINE_MAX} bytes (ao contrário de caracteres) serão permitidos em qualquer linha de um "arquivo de texto" válido.
      O valor de {LINE_MAX} é dado no arquivo <limits.h>
      (leia também Sensible line buffer size in C? ):

      {LINE_MAX}
      Salvo indicação em contrário, o comprimento máximo, em bytes, da linha de entrada de um utilitário (entrada padrão ou outro arquivo), quando o utilitário é descrito como processando arquivos de texto. O comprimento inclui espaço para a direita.
      Valor mínimo aceitável: {_POSIX2_LINE_MAX}

      Para um sistema baseado em GNU, não há limite definido (exceto memória) :

      Macro: int LINE_MAX
      A maior linha de texto que os utilitários POSIX.2 orientados a texto podem suportar. (Se você estiver usando as versões GNU desses utilitários, não há limite real, exceto o imposto pela memória virtual disponível, mas não há como a biblioteca informar isso.)

      Parece ser definido em posix_lim.h2048 (pelo menos para sistemas Linux GNU de 64 bits):

      $ grep -ri 'POSIX2_LINE_MAX' /usr/include/ 
      
      /usr/include/x86_64-linux-gnu/bits/xopen_lim.h:#define NL_LANGMAX       _POSIX2_LINE_MAX
      /usr/include/x86_64-linux-gnu/bits/posix2_lim.h:#define _POSIX2_LINE_MAX                2048
      /usr/include/x86_64-linux-gnu/bits/posix2_lim.h:#define LINE_MAX                _POSIX2_LINE_MAX
      

      Também pode ser encontrado usando o utilitário POSIX getconf :

      $ getconf LINE_MAX
      2048
      

    Relacionado: Por que os arquivos de texto devem terminar com uma nova linha?

    • 8

relate perguntas

  • 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

  • O que acontece com uma sessão unix quando o líder da sessão sai?

  • 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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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