장치가 인터럽트를 발생시키는 시기를 프로그래밍 방식으로 감지하는 방법은 무엇입니까?

장치가 인터럽트를 발생시키는 시기를 프로그래밍 방식으로 감지하는 방법은 무엇입니까?

장치가 인터럽트를 발생시키는 경우 프로그래밍 방식으로 어떻게 감지할 수 있나요? 이는 장치가 연결되거나 연결 해제될 때 발생할 수 있습니다.

다음과 같은 상황도 있습니다. 예를 들어 지문 스캐너에 손가락을 대면 인터럽트가 발생합니다. 이 인터럽트를 어떻게 감지하고 포착할 수 있나요?

이벤트가 발생할 때(예: CD 삽입 또는 펜 드라이브 삽입) 이러한 장치에서 발생한 인터럽트를 캡처하고 이를 사용하여 내 애플리케이션에서 이러한 장치와 관련된 작업을 수행할 수 있도록 Gtkmm을 사용하여 애플리케이션을 작성하고 싶습니다.

Gtkmm에서 수행할 수 없는 경우 낮은 수준에서 인터럽트를 포착하여 Gtkmm 애플리케이션에 알릴 수 있나요?

GParted가 어떻게 작동하는지 확인하고 있습니다. 처음에 나타 났고 /dev/sda펜 드라이브를 연결하면 자동으로 files앱이 열렸습니다. GParted를 확인하면 장치의 드롭다운 메뉴에 펜 드라이브가 존재하지 않습니다. GParted 메뉴에서 "장치 새로 고침" 또는 +를 선택한 경우 Ctrl에만 나타납니다 R.

답변1

더 낮은 수준에서 인터럽트를 포착하고 gtkmm 애플리케이션에 알릴 수 있습니다.

아니요, 그건커널 공간활동. 다행스럽게도 커널은 사용자 공간에서 액세스할 수 있는 인터페이스를 통해 특정 이벤트의 결과를 보고합니다.

귀하의 질문은 블록 장치가 연결된 때 또는 파일 시스템이 마운트된 때를 감지하려는지(전자 쪽으로 기울고 있는 것처럼 보이지만) 약간 모호합니다. 시스템이 자동 마운트(보통 기본적으로)를 사용하는 경우 블록 장치가 연결될 때 파일 시스템을 마운트합니다. 그렇지 않으면 수동으로 수행해야 합니다(예: 를 사용하여 mount).

어느 쪽이든 커널을 폴링/구문 분석/스캔하고 싶습니다.파일 노드인터페이스를 기반으로 합니다. 나는 이전 /dev/에 연결된 블록 장치와 마운트된 파일 시스템을 전달하고 추적하는 애플리케이션(실제로는 C++ GTK 애플리케이션)에서 이 작업을 수행한 적이 있습니다 /etc/mtab. 이는 언어에 구애받지 않는 간단한 접근 방식입니다. 어떤 사람들은 이것이 파일/디렉터리 읽기를 포함하기 때문에 처음에는 약간 불쾌하다고 생각하지만 이러한 인터페이스는 실제로 디스크에 존재하지 않으므로 과도한 I/O 오버헤드가 없으며 read()시스템 호출이라는 점을 기억하십시오. 커널 인터페이스에서 파일 노드를 읽는 것은 listAttachedDevices()언어 독립적이라는 점을 제외하면 스타일 API와 동일합니다 . 이러한 노드에서 데이터를 읽으면 커널은 해당 노드가 나타내는 정보를 직접 전달합니다.

/dev디렉토리에는 연결된 장치가 특수 장치 노드 파일로 나열됩니다 /dev/sda. 예를 들어 장치가 연결 및 연결 해제되면 커널에 의해 추가 및 제거되므로 주기적으로(예: 5초마다) 폴링하여 추적하면 새 장치와 장치 노드를 감지할 수 있습니다. 삭제된 콘텐츠. 여기서 유일한 복잡한 점은 콜백 스타일 API가 없기 때문에 실제로 지속적으로 확인하려면 이에 대한 자체 스레드를 만들어야 한다는 것입니다(왜 gparted클릭해야 할 수도 있습니다 Refresh Devices).

더 나은 대안 /dev은 과 (아래 참조) 사이에 상당한 차이가 있거나 후자의 노드에 다음이 포함되어 있다는 점에 /sys/block유의하십시오./dev/proc/sys관련 정보장치와 같은 것, 노드 /dev장치에 대한 실제 연결(따라서 를 스캔하는 경우 /dev개별 파일을 읽지 말고 파일이 존재한다는 점만 참고하세요.)

/etc/mtab지금은심볼릭 링크(참조) -s;는 커널 인터페이스의 주요 스위스 군용 칼입니다(참고자료 참조). 이 목록man ln/proc/self/mounts/procman proc마운트된 파일 시스템;자동 마운트를 사용하면 사물을 연결/분리할 때 사물이 나타나고 사라집니다. /proc및 의 정보는 /sys일반적으로 ASCII 텍스트 형식이므로 cat등을 사용하여 이러한 파일을 볼 수 있고 string(stream) 함수를 사용하여 구문 분석할 수 있습니다.

WRT는 다른 유형의 장치(예: 지문 스캐너)에 대한 /sys좋은 시작점입니다. 및 디렉토리가 /sys/dev포함되어 있습니다 . 블록 장치는 일반적으로 해당 장치에 대한 정보를 저장합니다.blockchar무작위 액세스. Char 장치는 스캐너, 카메라, HID 장치(마우스 및 키보드와 같은 휴먼 인터페이스 장치)를 포함하여 스트림 형태로 시스템과 정보를 교환합니다. 나는 gtkmm이좀 고급스러운 것들추가 HID 항목의 경우 아마도 GUI와의 상호작용에 중요하기 때문일 것입니다.

답변2

나는 대답에 동의합니다 goldilocks. 그러나 read사용할 수 있습니다 inotify.

매뉴얼 페이지는 다음과 같습니다.여기그리고여기.

제작자(개발자)가 설명과 예시를 잘 해주셨네요.inotify 여기.

관련 정보