나는 char 디바이스 드라이버를 작성했으며, 폴링 메커니즘을 통해 디바이스를 읽을 수있게되면 신호를 보내는 부분이 QT "wrapper"를 작성 중이다. 나는하려고했었다 :QSocketNotifier를 사용하여 문자 장치를 선택하십시오.
readyRead는 결코 호출되지 않았고 드라이버는 poll 메소드를 호출하는 것을 결코보고하지 않았다.
나는 내 드라이버 내 드라이버가 wake_up 전화와 나는 두 개의 설문 조사 내 드라이버에서 호출을 볼 수에 대한이 제대로 기다립니다QFile file("/dev/testDriver");
if(file.open(QFile::ReadOnly)) {
struct pollfd fd;
fd.fd = file.handle();
fd.events = POLLIN;
struct pollfd fds[] = {fd};
int ready;
qDebug() << "Started poll";
ready = poll(fds, 1, -1);
qDebug() << "Poll returned: " << ready;
QTextStream in(&file);
QTextStream out(stdout);
out << in.readAll();
}
을하고있다 알 수 있도록하려면 다음 코드를 얻을 수 있었다. 하나는 초기 폴링 등록을위한 것이고 하나는 wake_up이 발생할 때를위한 것입니다.
이렇게하면이 장치에서 폴링과 신호 및 루프를 발생시키는 별도의 스레드를 생성해야 할 것입니다.
이런 식으로 QSocketNotifier을 사용할 수 있습니까? QFile::handle()의 설명서가 있어야 함을 나타냅니다.
를 사용하여 표준 입력을 볼 수 있습니다 언급거야? 나는 비슷한 것을 썼지 만'file-> read (buf, 1)'를 쓸 수 없었다. 그냥 매달릴거야. 그러나'read (file-> handle(), buf, 1)'는 정상적으로 작동했다. – Harvey
@Harvey 네, 확인한 대답이 나를 위해 일했습니다. 간단한 코딩 오류로 판명되었습니다. 또한 내 대답을 확인하여 도움이되는지 확인하십시오. – jjcf89
이전 코멘트를 수정하려면 장치 드라이버 작동 방식에 대한 오해가있었습니다. 두 코드 모두 작동했는데, 그 중 하나를 사용하여 오류 연결을 만들 때 다른 요인으로 인해 전체 테스트가 실패하게되었습니다. – Harvey