- 论坛徽章:
- 0
|
在网上找了些,在没有更理想的方案之前、实时性不高的前提下,暂时用CPU轮询的方式可以实现。
思路:当有USB打印机插入到ARM板上时,/sys/class/usb/lp0文件会被自动生成;当拔出打印机时,文件相应地被删除。因此可以创建一个线程每隔5s查询这个文件lp0是否存在。
实现:这种方法缺陷有二,对于嵌入式来讲有些浪费CPU,这是其一;其二,由于是隔一段时间T才扫描,当用户在T时间内拔掉并重新插上另一个打印机时,有可能被认为lp0仍然是原来的打印机,而非新插入的打印机。不过对于我的实际情况这个拙劣的方法还是可以忍受的。希望有朋友提出更好的方案。- void* monitor(void *arg) /* 监视USB打印机是否接入 */
- {
- while(1)
- {
- while(lp0存在)
- {
- printf("打印机已接入.\n");
- sleep(5); /* 每隔5秒检查一次lp0文件是否存在 */
- }
- printf("打印机已拔出.\n");
- sleep(5); /* 每隔5秒检查一次lp0文件是否存在 */
- }
- }
- int main()
- {
- pthread_t tid;
- if (pthread_create(&tid, NULL, monitor, NULL)) /* 创建一个线程,用来监视USB打印机的接入/拔出 */
- {
- printf("cannot create a thread in the calling process.\n");
- exit(0);
- }
- while(1); /* 此时main线程与monitor线程并发运行 */
- return 0;
- }
复制代码 |
|