亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4740 | 回復: 2
打印 上一主題 下一主題

為什么讀取linux 設備文件event,數(shù)據(jù)讀不全 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-12-26 20:00 |只看該作者 |倒序瀏覽
我使用evtest.c讀取/dev/input/event5,event5是我自定義的usb hid設備的設備文件,可是每次讀取該文件,讀取的bytes總是小于實際設備上傳的bytes.哪位高手能幫我解決一下嗎,謝謝了.
以下是代碼:
int main (int argc, char **argv)
{
        int fd, rd, i, j, k;
        struct input_event ev[64];
        struct timeval lasttime;
        int version;
        unsigned short id[4];
        unsigned long bit[EV_MAX][NBITS(KEY_MAX)];
        char name[256] = "Unknown";
        int abs[5];


        if ((fd = open("/dev/input/event5", O_RDONLY)) < 0)
        {
                perror("evtest");
                return 1;
        }

        if (ioctl(fd, EVIOCGVERSION, &version))
        {
                perror("evtest: can't get version");
                return 1;
        }

        printf("Input driver version is %d.%d.%d\n",
                version >> 16, (version >> 8) & 0xff, version & 0xff);

        ioctl(fd, EVIOCGID, id);
        printf("Input device ID: bus 0x%x vendor 0x%x product 0x%x version 0x%x\n",
                id[ID_BUS], id[ID_VENDOR], id[ID_PRODUCT], id[ID_VERSION]);

        ioctl(fd, EVIOCGNAME(sizeof(name)), name);
        printf("Input device name: \"%s\"\n", name);

        memset(bit, 0, sizeof(bit));
        ioctl(fd, EVIOCGBIT(0, EV_MAX), bit[0]);
               
        printf("Testing ... (interrupt to exit)\n");
       
        while (1)
        {
                rd = read(fd, ev, sizeof(struct input_event) * 64);

                if (rd < (int) sizeof(struct input_event))
                {
                        printf("yyy\n");
                        perror("\n evtest: error reading");
                        return 1;
                }       
               
        }
        close(fd);
}

[ 本帖最后由 dreamice 于 2008-12-26 20:38 編輯 ]

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [報告]
發(fā)表于 2008-12-27 17:18 |只看該作者

回復 #1 immember 的帖子

你讀取的小于實際上傳得可能是在你讀取的特定時刻,實際上傳的數(shù)據(jù)確實比較少;
另外,這里看不到你底層驅動的實現(xiàn),也不好分析。

論壇徽章:
0
3 [報告]
發(fā)表于 2008-12-29 08:35 |只看該作者
原帖由 dreamice 于 2008-12-27 17:18 發(fā)表
你讀取的小于實際上傳得可能是在你讀取的特定時刻,實際上傳的數(shù)據(jù)確實比較少;
另外,這里看不到你底層驅動的實現(xiàn),也不好分析。


其實我的這個自定義的USB hid 設備在windows里面用bus hound抓過數(shù)據(jù),是沒有問題的,每次都上傳12byte數(shù)據(jù).
此外我比較贊同你的"特定時刻"說法,因為我有的時候讀的數(shù)據(jù)長度是正確的.但如果是這個問題,怎么能解決呢.
至于底層驅動,我是用的是2.6.26內核默認的usbhid驅動,我沒有改過.

對于我的這些問題,我最想用的方法就是自己寫底層驅動,可是現(xiàn)在系統(tǒng)使用默認的usbhid,并且編譯倒了內核之中,而非(.ko文件)模塊.usbhid攔截了我的設備,使我自己寫的驅動無法生效
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP