Eu tento fazer uma ioctl()
chamada de bash. Isso é muito fácil de fazer em C, então existem ferramentas ( https://github.com/jerome-pouiller/ioctl ) que envolvem essa funcionalidade.
Mas isso dificultaria muito a distribuição do meu script, porque eu teria que distribuir essa ferramenta junto com ele.
Existe alguma outra ferramenta que já está incluída nos repositórios Debian APT que pode fazer o mesmo? Para que eu pudesse fazer um simples apt install
a partir do script?
A
ioctl
chamada do sistema leva uma lista de parâmetros que varia muito dependendo da solicitação. Muitas solicitações usam dados estruturados como entrada ou produzem dados estruturados como saída. Isso torna difícil de usar a partir do shell. É claro que existem comandos que envolvem uma solicitação ioctl específica ou um conjunto específico - por exemplo,stty
com terminal ioctl - mas não genéricos. A ferramenta à qual você vincula permite a passagem de dados binários para dentro e para fora, mas esses dados são difíceis de manipular no shell.Recomendo escrever seu programa em uma linguagem de script mais avançada, como Perl ou Python. Isso facilita a implantação, pois as pessoas não precisam de uma ferramenta obscura: a maioria dos sistemas semelhantes ao Unix possui Perl e, atualmente, a maioria também possui Python.
ioctl
Perl tem uma função predefinida e fornece acesso a pelo menos alguns nomes simbólicos para valores de solicitação viasys/ioctl.ph
. Não sei como você deve listar os nomes simbólicos disponíveis. A entrada/saída extra está disponível como escalar (ou seja, string de bytes).Python tem uma
ioctl
função nofnctl
módulo. Otermios
módulo define alguns nomes simbólicos para ioctl relacionados ao terminal. A entrada/saída extra pode ser passada como um número inteiro ou uma string de bytes.Em Python, uma abordagem alternativa poderia ser o
ctypes
módulo , que é uma ótima maneira de chamar funções C de uma linguagem de alto nível. É bom se o ioctl que você deseja chamar for definido como tendo uma estrutura como entrada ou saída, porque ctypes permite que você acesse estruturas da maneira que um compilador C as faria, sem precisar se preocupar com tamanhos de tipo de dados, preenchimento, endianness, etc. .