Coisas mais importantes que o POSIX 7 define
API C
Estende bastante o ANSI C com coisas como:
- mais operações de arquivo:
mkdir
, dirname
, symlink
, readlink
, link
(hardlinks), poll()
, stat
, sync
,nftw()
- processo e tópicos:
fork
, execl
, wait
, pipe
, semaphors sem_*
, memória compartilhada ( shm_*
), kill
, parâmetros de programação ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
- rede:
socket()
- gerenciamento de memória:
mmap
, mlock
, mprotect
, madvise
,brk()
- utilitários: expressões regulares (
reg*
)
Essas APIs também determinam os conceitos subjacentes do sistema dos quais dependem, por exemplo, fork
exigem o conceito de um processo.
Muitas chamadas de sistema Linux existem para implementar uma função específica API POSIX C e tornar o Linux compatível, por exemplo sys_write
, sys_read
... Muitos desses syscalls também têm extensões específicas do Linux no entanto.
Principal implementação do desktop Linux: glibc, que em muitos casos apenas fornece um invólucro superficial para chamadas do sistema.
Utilitários CLI
Por exemplo: cd
, ls
, echo
, ...
Muitos utilitários são front-ends diretos do shell para uma função correspondente da API C, por exemplo mkdir
.
Maior Linux aplicação de desktop: GNU Coreutils para os pequenos, projetos GNU separadas para os grandes: sed
, grep
, awk
, ... Alguns utilitários CLI são implementadas por Bash como built-ins .
Idioma do shell
Por exemplo, a=b; echo "$a"
Grande implementação de desktop Linux: GNU Bash .
Variáveis ambientais
Por exemplo: HOME
, PATH
.
PATH
a semântica de pesquisa é especificada , incluindo como as barras impedem a PATH
pesquisa .
Status de saída do programa
O ANSI C diz 0
ou EXIT_SUCCESS
para o sucesso, EXIT_FAILURE
para a falha e deixa a implementação restante definida.
O POSIX adiciona:
Expressão regular
Existem dois tipos: BRE (Básico) e ERE (Estendido). O básico foi descontinuado e mantido apenas para não quebrar as APIs.
Essas são implementadas pelas funções da API C e usadas nos utilitários da CLI, por exemplo, grep
aceitam BREs por padrão e EREs com -E
.
Por exemplo: echo 'a.1' | grep -E 'a.[[:digit:]]'
Grande implementação do Linux: glibc implementa as funções sob regex.h que programas como grep
podem usar como back-end.
Estrutura do diretório
Por exemplo: /dev/null
,/tmp
O Linux FHS estende bastante o POSIX.
Nomes de arquivos
/
é o separador de caminho
NUL
não pode ser usado
.
é cwd
, ..
pai
- nomes de arquivos portáteis
- use no máximo 14 caracteres e 256 no caminho completo
- pode conter apenas:
a-zA-Z0-9._-
Consulte também: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
Convenções de API do utilitário de linha de comando
Não obrigatório, usado pelo POSIX, mas quase em nenhum outro lugar, principalmente no GNU. Mas é verdade que é muito restritivo, por exemplo, apenas sinalizadores de letra única (por exemplo -a
), não há versões longas com hífen duplo (por exemplo --all
).
Algumas convenções amplamente usadas:
-
significa stdin onde um arquivo é esperado
--
termina sinalizadores, por exemplo, ls -- -l
para listar um diretório chamado-l
Consulte também: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"ACLs POSIX" (Listas de controle de acesso), por exemplo, usadas como back-end setfacl
.
Isso foi retirado, mas foi implementado em vários sistemas operacionais, inclusive no Linux comsetxattr
.
Quem está em conformidade com o POSIX?
Muitos sistemas seguem o POSIX de perto, mas poucos são realmente certificados pelo Open Group, que mantém o padrão. Os certificados notáveis incluem:
A maioria das distribuições Linux é muito compatível, mas não é certificada porque não deseja pagar a verificação de conformidade. O K-UX da Inspur e o EulerOS da Huawei são dois exemplos certificados.
A lista oficial de sistemas certificados pode ser encontrada em: https://www.opengroup.org/openbrand/register/ e também na página wiki .
janelas
O Windows implementou o POSIX em algumas de suas distribuições profissionais.
Como era um recurso opcional, os programadores não podiam confiar nele para a maioria dos aplicativos do usuário final.
O suporte foi preterido no Windows 8:
Em 2016, uma nova API oficial semelhante ao Linux chamada "Windows Subsystem for Linux" foi anunciada. Ele inclui chamadas de sistema Linux, ELF em execução, partes do /proc
sistema de arquivos, Bash, GCC (TODO provavelmente glibc?) apt-get
E muito mais: https://channel9.msdn.com/Events/Build/2016/P488, por isso acredito que permitirá que o Windows execute grande parte, se não todos, do POSIX. No entanto, ele é focado em desenvolvedores / implantação em vez de usuários finais. Em particular, não havia planos para permitir o acesso à GUI do Windows.
Visão geral histórica da compatibilidade oficial do Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin é um projeto de terceiros da GPL bem conhecido por "fornecer uma funcionalidade substancial da API POSIX" para Windows, mas requer que você "reconstrua seu aplicativo a partir da fonte, se quiser que ele seja executado no Windows". O MSYS2 é um projeto relacionado que parece adicionar mais funcionalidades ao Cygwin.
Android
O Android tem sua própria biblioteca C (Bionic), que não suporta totalmente o POSIX a partir do Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Nível de bônus
A base padrão do Linux estende ainda mais o POSIX.
Use os índices que não são de quadros, eles são muito mais legíveis e pesquisáveis: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Obtenha uma versão compactada completa das páginas HTML para grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939