开发者社区> 问答> 正文

求教!! linux read函数 出错? 400 报错

求教!! linux read函数 出错? 400 报错

请求懂的人帮忙看一下!

read input子系统中的event2文件,出错很奇怪

代码如下:有疑问的部分用红色标注

#include <stdio.h>
#include <stdlib.h>
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>

static void show_event(struct input_event* event)
{
        printf("%d %d %d/n", event->type, event->code, event->value);

        return;
}

int main()
{
        struct input_event event;
        printf("sizeof of input_event:%d\n",sizeof(event));  //打印16

        const char *file_name = "/dev/input/event2";

        int fd = open(file_name, O_RDONLY);
        if(fd > 0)
        {
                while(1)
                {
                        printf("in while\n");   //可以被执行到
                        int ret = read(fd, &event, sizeof(event)); //将sizeof(event) 换成小于16的数字,就可以执行到下一条语句
                        printf("ret: %d\n",ret);  //不被执行了

                        if(ret == sizeof(event))
                        {
    printf("before show event\n");
                                show_event(&event);
                        }
                        else
                        {
    printf("in else!\n");
                                break;
                        }
                }
                close(fd);
        }

        return 0;
}

谢谢~~

展开
收起
爱吃鱼的程序员 2020-06-05 12:15:35 613 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    木有人帮忙吗? 自己顶以下把TnT

    ######东软的?哪个部门的?######

    厄……又试了一下,读Ubuntu下/dev/input/event1 之后,read函数就可以成功返回了。

    看来还是input中event文件的问题啊

    ######这...read函数是阻塞模式,你是要读外设吗?######

    谢谢回答

    event1 是键盘 , 以上代码只是个demo ,要读得外设现在还没有

     但是read是阻塞模式是什么意思?  不太懂 , 请指教

    ######回复 @晓风拂柳 : 嗯 的确像您说的那样 一直在等键盘输入。 那就先这样吧 谢谢~######我也是查了下资料,read只有在socket编程的时候才可以设置成非阻塞模式,其他地方被办法。阻塞模式就是等待响应,你这里是等待键盘按键响应,只有按键按下去了,才会执行下去。
    2020-06-05 12:15:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载