ioctl()
bash에서 전화를 걸려 고 합니다 . 이는 C에서 수행하기 쉽기 때문에 도구(https://github.com/jerome-pouiller/ioctl)는 이 기능을 래핑합니다.
하지만 이렇게 하면 도구도 함께 배포해야 하므로 스크립트 배포가 더 어려워집니다.
동일한 작업을 수행할 수 있는 데비안 APT 저장소에 이미 포함된 다른 도구가 있습니까? 그러면 apt install
스크립트에서 간단한 작업을 수행할 수 있나요?
답변1
시스템 ioctl
호출이 취하는 매개변수 목록은 요청에 따라 크게 달라집니다. 많은 요청이 구조화된 데이터를 입력으로 사용하거나 구조화된 데이터를 출력으로 생성합니다. 이로 인해 쉘에서 사용하는 것이 어색해집니다. 물론 특정 ioctl 요청이나 특정 세트(예: stty
터미널 ioctl 사용)를 중심으로 하는 일부 명령이 있지만 범용 명령은 아닙니다. 연결한 도구를 사용하면 바이너리 데이터를 안팎으로 전달할 수 있지만 셸에서 해당 데이터를 조작하는 것은 어렵습니다.
Perl이나 Python과 같은 더 높은 수준의 스크립팅 언어로 프로그램을 작성하는 것이 좋습니다. 이렇게 하면 모호한 도구가 필요하지 않기 때문에 배포가 더 쉬워집니다. 대부분의 Unix 계열 시스템에는 Perl이 있고 현재 대부분에는 Python도 있습니다.
Perl에는 미리 정의된ioctl
기능그리고 요청된 값의 최소한 일부 기호 이름에 대한 액세스를 제공합니다 sys/ioctl.ph
. 사용 가능한 기호 이름을 어떻게 나열해야 하는지 모르겠습니다. 추가 입력/출력은 스칼라(예: 바이트 문자열)로 제공됩니다.
파이썬에는ioctl
기능fnctl
모듈 에서 . 이것termios
모듈은 터미널 관련 ioctl에 대한 일부 기호 이름을 정의합니다. 추가 입력/출력은 정수 또는 바이트 문자열로 전달될 수 있습니다.
Python에서는 또 다른 접근 방식이 있을 수 있습니다.ctypes
기준 치수, 이는 고급 언어에서 C 함수를 호출하는 아주 좋은 방법입니다. 호출하는 ioctl이 구조체를 입력 또는 출력으로 사용하도록 정의되어 있다면 매우 좋습니다. 왜냐하면 ctypes를 사용하면 데이터 유형 크기, 패딩, 단어에 대해 걱정할 필요 없이 C 컴파일러가 레이아웃하는 방식으로 구조체에 액세스할 수 있기 때문입니다. 구간순서 등