Linux读取设备信息代码编写

简介: Linux读取设备信息代码编写

前言

本篇文章我们将介绍到如何使用open,ioctl函数读取设备信息。

一、open函数

a558ae40f60f45e1bf5de2da823cfdaa.png

使用man手册查看到open函数的使用方法。

二、ioctl

935702e4f2104c44930d7380887c9c69.png

使用man手册查看到ioctl函数的使用方法。

三、总体代码编写

#include <linux/input.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
/* 01_get_input_info /dev/input/event0 */
int main(int argc,char **argv)
{
    int fd;
    int err;
    struct input_id id;
    int len;
    int byte;
    int bit;
    int i;
    unsigned char evbit[2];
    char *ev_names[] = {
    "EV_SYN ",
    "EV_KEY ",
    "EV_REL ",
    "EV_ABS ",
    "EV_MSC ",
    "EV_SW  ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "NULL ",
    "EV_LED ",
    "EV_SND ",
    "NULL ",
    "EV_REP ",
    "EV_FF  ",
    "EV_PWR ",
    };
    if(argc!=2)
    {
        printf("Usage :%s <dev> \n",argv[0]);
        return -1;
    }
    fd=open(argv[1],O_RDWR);
    if(fd<0)
    {
        printf("open %s err\n",argv[1]);
        return -1;
    }
    err=ioctl(fd,EVIOCGID,&id);
    if(err==0)
    {
    printf("bustype = 0x%x\n", id.bustype );
    printf("vendor  = 0x%x\n", id.vendor  );
    printf("product = 0x%x\n", id.product );
    printf("version = 0x%x\n", id.version );        
    }
    len=ioctl(fd,EVIOCGBIT(0, sizeof(evbit)),&evbit);
    if(len>0&&len<=sizeof(evbit))
    {
        printf("support dev:");
        for(i=0;i<len;i++)
        {
            byte=evbit[i];
            for(bit=0;bit<8;bit++)
            {
                if(byte&(1<<bit))
                {
                    printf("%s ", ev_names[i*8 + bit]);
                }
            }
        }
        printf("\n");
    }
    return 0;
}

总结

大家可以下去实验一下。

相关文章
|
4月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
5月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
710 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
6月前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
109 4
|
6月前
|
Linux Shell Python
9-7|salt代码在linux机子那个目录
9-7|salt代码在linux机子那个目录
|
7月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
361 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
7月前
|
Linux 程序员 开发者
源社区的兴起:从“代码隐士”到Linux引领的“全球编程嘉年华”
在编程的古老森林中,曾有“代码隐士”默默耕耘,惧怕智慧外泄。直到“开源”春风拂过,源社区如全球编程嘉年华盛开!开源文化颠覆了“独门秘籍”的传统,像“武林秘籍共享”般在网络上公开,鼓励知识传播与智慧碰撞。程序员组队开发,分享代码,提升科技实力。Linux则从“首席大厨”变身为“总导演”,以强大内核调制出诱人应用,引领潮流并推动技术创新。加入这场没有血腥厮杀,只有知识盛宴的“编程版《饥饿游戏》”吧!与全球开发者共享编程的乐趣与成就感!别忘了带上你的“独门秘籍”,可能下一个改变世界的创意就在其中!
109 7
|
6月前
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
121 0
|
6月前
|
机器学习/深度学习 Linux 开发工具
Linux内核开发流程指南 - 5. 编写正确的代码【ChatGPT】
Linux内核开发流程指南 - 5. 编写正确的代码【ChatGPT】
|
6月前
|
缓存 编译器 Linux
Linux内核开发流程指南 - 4. 编写正确的代码【ChatGPT】
Linux内核开发流程指南 - 4. 编写正确的代码【ChatGPT】
|
7月前
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)