Linux系统点亮LED

2023-11-11

对于一款学习型开发板来说,永远都绕不开LED 这个小小的设备,基本上每块板子都至少会有一颗
LED 小灯,对于我们的ALPHA/Mini I.MX6U 开发板来说同样也是如此。
ALPHA/Mini I.MX6U 开发板(包括核心板和底板)上一共有3 颗LED 小灯,当仅有一颗LED 能够被用户所控制,其它两颗均作为电源指示灯而存在,用户对其不可控制;LED 通常是由GPIO 所控制的,本章我们来学习如何编写应用程序控制LED 灯的亮灭。

应用层操控硬件的两种方式

在Linux 系统下,一切皆文件!应用层如何操控底层硬件,同样也是通过文件I/O 的方式来实现,前面我们给大家介绍了设备文件,包括字符设备文件和块设备文件,为啥叫设备文件?大家有没有想过这个问题呢?其实设备文件便是各种硬件设备向应用层提供的一个接口,应用层通过对设备文件的I/O 操作来操控硬件设备,譬如LCD 显示屏、串口、按键、摄像头等等,所以设备文件其实是与硬件设备相互对应的。设备文件通常在/dev/目录下,我们也把/dev 目录下的文件称为设备节点。
设备节点并不是操控硬件设备的唯一途径,除此之外,我们还可以通过sysfs 文件系统对硬件设备进行操控,接下来将进行介绍!

sysfs 文件系统

简单的说,sysfs 是一个基于内存的文件系统,同devfs、proc 文件系统一样,称为虚拟文件系统;它的作用是将内核信息以文件的方式提供给应用层使用。7.7 小节中我们学习过proc 文件系统,应用层可以通过
proc文件系统得到系统信息和进程相关信息,与proc文件系统类似,sysfs 文件系统的主要功能便是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图。
sysfs 文件系统把连接在系统上的设备和总线组织成为一个分级的文件、展示设备驱动模型中各组件的层次关系。sysfs 提供了一种机制,可以显式的描述内核对象、对象属性及对象间关系,用来导出内核对象
(kernel object,譬如一个硬件设备)的数据、属性到用户空间,以文件目录结构的形式为用户空间提供对这些数据、属性的访问支持。表15.1.1 描述了内核对象、对象属性及对象间关系在用户空间sysfs 中的的表现:
在这里插入图片描述

sysfs 与/sys

sysfs 文件系统挂载在/sys 目录下,启动ALPHA/Mini I.MX6U 开发板,进入Linux 系统(开发板出厂系统)之后,我们进入到/sys 目录下查看,如下所示:
在这里插入图片描述
上图显示的便是sysfs 文件系统中的目录,包括block、bus、class、dev、devices、firmware、fs、kernel、
modules、power 等,每个目录下又有许多文件或子目录,对这些目录的说明如所示:
在这里插入图片描述
在这里插入图片描述
系统中所有的设备(对象)都会在/sys/devices 体现出来,是sysfs 文件系统中最重要的目录结构;而
/sys/bus、/sys/class、/sys/dev 分别将设备按照挂载的总线类型、功能分类以及设备号的形式将设备组织存放在这些目录中,这些目录下的文件都是链接到了/sys/devices 中。
设备的一些属性、数据通常会通过设备目录下的文件体现出来,也就是说设备的数据、属性会导出到用户空间,以文件形式为用户空间提供对这些数据、属性的访问支持,可以把这些文件称为属性文件;读这些属性文件就表示读取设备的属性信息,相反写属性文件就表示对设备的属性进行设置、以控制设备的状态。

总结

这里给大家进行一个总结,应用层想要对底层硬件进行操控,通常可以通过两种方式:
⚫ /dev/目录下的设备文件(设备节点);
⚫ /sys/目录下设备的属性文件。
具体使用哪种方式需要根据不同功能类型设备进行选择,有些设备只能通过设备节点进行操控,而有些设备只能通过sysfs 方式进行操控;当然跟设备驱动具体的实现方式有关,通常情况下,一般简单地设备会使用sysfs 方式操控,其设备驱动在实现时会将设备的一些属性导出到用户空间sysfs 文件系统,以属性文件的形式为用户空间提供对这些数据、属性的访问支持,譬如LED、GPIO 等。
但对于一些较复杂的设备通常会使用设备节点的方式,譬如LCD 等、触摸屏、摄像头等。

标准接口与非标准接口

Linux 内核中为了尽量降低驱动开发者难度以及接口标准化,就出现了设备驱动框架的概念;Linux 针对各种常见的设备进行分类,譬如LED 类设备、输入类设备、FrameBuffer 类设备、video 类设备、PWM 设备等等,并为每一种类型的设备设计了一套成熟的、标准的、典型的驱动实现的框架,这个就叫做设备驱动框架。设备驱动框架为驱动开发和应用层提供了一套统一的接口规范,譬如对LED 类设备来说,内核提供了LED 设备驱动框架,驱动工程师编写LED 驱动时,使用LED 驱动框架来开发自己的LED 驱动程序,这样做的好处就在于,能够对上层应用层提供统一、标准化的接口、同时又降低了驱动开发工程师的难度。
编写LED 驱动程序并不仅仅只能使用内核设计的LED 设备驱动框架,不用内核的LED 驱动框架也是可以开发出LED 驱动程序的,但如果你这样写,使用这个驱动程序注册的LED 那就不是标准设备了,因为该驱动程序向应用层提供的接口并不是统一、标准化接口。
除此之外,还有很多硬件外设,尤其是嵌入式系统中所使用到的这些硬件外设,它们可能并不属于Linux
系统所规划的设备分类当中的任何一种设备类型,譬如在Linux 系统中,有一种设备类型叫杂散/杂项类设备(misc device),大家可以想一想为啥叫杂散类设备,说明这种设备既不属于这种设备类型、又不属于另一种设备类型,无奈只能把它归为杂项类。
因为一个计算机系统所能够连接、使用的外设实在太多了,不可能每一种外设都能够精准地分类到某一个设备类型中,通常把这些无法进行分类的外设就称为杂项设备,杂项设备驱动程序向应用层提供的接口通常都不是标准化接口、它是一种非标准接口,具体如何去操控这个设备通常只有驱动工程师知道。所以在嵌入式系统中,很多硬件外设的驱动程序都是定制的。

LED 硬件控制方式

ALPHA/Mini I.MX6U 开发板底板上有一颗可被用户控制的LED 灯,如下所示:
在这里插入图片描述
上图中箭头所指的LED 便是开发板上唯一一个可以被用户所控制的LED,另外一颗LED 则(名称为
PWR)是底板上的电源指示灯。
对于ALPHA/Mini I.MX6U 开发板出厂系统来说,此LED 设备使用的是Linux 内核标准LED 驱动框架注册而成,在/dev 目录下并没有其对应的设备节点,其实现使用sysfs 方式控制。进入到/sys/class/leds 目录下,如下所示:
在这里插入图片描述
上小节介绍了/sys/class 目录,系统中的所有设备根据其功能分类组织到了/sys/class 目录下,所以
/sys/class/leds 目录下便存放了所有的LED 类设备。从上图可以看到该目录下有一个sys-led 文件夹,这个便是底板上的用户LED 设备文件夹,进入到该目录下,如下所示:
在这里插入图片描述
这里我们主要关注便是brightness、max_brightness 以及trigger 三个文件,这三个文件都是LED 设备的属性文件:
⚫ brightness:翻译过来就是亮度的意思,该属性文件可读可写;所以这个属性文件是用于设置LED
的亮度等级或者获取当前LED 的亮度等级,譬如brightness 等于0 表示LED 灭,brightness 为正整数表示LED 亮,其值越大、LED 越亮;对于PWM 控制的LED 来说,这通常是适用的,因为它存在亮度等级的问题,不同的亮度等级对应不同的占空比,自然LED 的亮度也是不同的;但对于GPIO
控制(控制GPIO 输出高低电平)的LED 来说,通常不存在亮度等级这样的说法,只有LED 亮(brightness 等于0)和LED 灭(brightness 为非0 值的正整数)两种状态,ALPHA/Mini I.MX6U
开发板上的这颗LED 就是如此,所以自然就不存在亮度等级一说,只有亮和灭两种亮度等级。
⚫ max_brightness:该属性文件只能被读取,不能写,用于获取LED 设备的最大亮度等级。
⚫ trigger:触发模式,该属性文件可读可写,读表示获取LED 当前的触发模式,写表示设置LED 的触发模式。不同的触发模式其触发条件不同,LED 设备会根据不同的触发条件自动控制其亮、灭状态,通过cat 命令查看该属性文件,可获取LED 支持的所有触发模式以及LED 当前被设置的触发模式:

在这里插入图片描述
方括号([heartbeat])括起来的表示当前LED 对应的触发模式,none 表示无触发,常用的触发模式包括
none(无触发)、mmc0(当对mmc0 设备发起读写操作的时候LED 会闪烁)、timer(LED 会有规律的一亮一灭,被定时器控制住)、heartbeat(心跳呼吸模式,LED 模仿人的心跳呼吸那样亮灭变化)。

通常系统启动之后,会将板子上的一颗LED 设置为heartbeat 触发模式,将其作为系统正常运行的指示灯,譬如ALPHA/Mini I.MX6U 开发板系统启动之后,底板上的用户LED 就会处于心跳呼吸模式,这个大家自己观察便可知道。
通过上面的介绍,已经知道如何去控制ALPHA/Mini I.MX6U 开发板底板上的用户LED 了,譬如通过
echo 命令进行控制:

echo timer > trigger //将LED 触发模式设置为timer
echo none > trigger //将LED 触发模式设置为none
echo 1 > brightness //点亮LED echo 0 > brightness//熄灭LED

大家可以自己动手使用echo 或cat 命令进行测试、控制LED 状态;除了使用echo 或cat 命令之后,同样我们编写应用程序,使用write()、read()函数对这些属性文件进行I/O 操作以达到控制LED 的效果。
Tips:命令cat 读取以及echo 写入到属性文件中的均是字符串,所以如果在应用程序中通过write()向属性文件写入数据,同样也要是字符串形式;同理,使用read()读取的数据也是字符串ASCII 编码的。

编写LED 应用程序

通过上一小节的介绍,我们已经知道了如何控制LED,接下来编写一个简单地示例代码演示如何控制
LED,测试代码如下所示:
本例程源码对应的路径为:开发板光盘->11、Linux C 应用编程例程源码->15_led->led.c。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define LED_TRIGGER "/sys/class/leds/sys-led/trigger"
#define LED_BRIGHTNESS "/sys/class/leds/sys-led/brightness"
#define USAGE() fprintf(stderr, "usage:\n" \
                " %s <on|off>\n" \
                " %s <trigger> <type>\n", argv[0], argv[0])
int main(int argc, char *argv[])
{
        int fd1, fd2;
        /* 校验传参*/
        if (2 > argc) {
                USAGE();
                exit(-1);
        }
        /* 打开文件*/
        fd1 = open(LED_TRIGGER, O_RDWR);
        if (0 > fd1) {
                perror("open error");
                exit(-1);
        }
        fd2 = open(LED_BRIGHTNESS, O_RDWR);
        if (0 > fd2) {
                perror("open error");
                exit(-1);
        }
        /* 根据传参控制LED */
        if (!strcmp(argv[1], "on")) {
                write(fd1, "none", 4); //先将触发模式设置为none
                write(fd2, "1", 1); //点亮LED
        }
        else if (!strcmp(argv[1], "off")) {
                write(fd1, "none", 4); //先将触发模式设置为none
                write(fd2, "0", 1); //LED 灭
        }
        else if (!strcmp(argv[1], "trigger")) {
                if (3 != argc) {
                        USAGE();
                        exit(-1);
                }
                if (0 > write(fd1, argv[2], strlen(argv[2])))
                        perror("write error");
        }
        else
                USAGE();
        exit(0);
}

程序中定义了两个宏,LED_TRIGGER 和LED_BRIGHTNESS,分别对应/sys/class/leds/sys-led/trigger 和
/sys/class/leds/sys-led/brightness 属性文件,宏USAGE()用于打印程序的使用方法;程序首先会调用open()函数打开这两个属性文件,之后判断传入参数指向相应的动作,传入"on"表示点亮LED,先调用write()将"none"
写入到trigger 属性文件中,也就是设置为无触发,接着再向brightness 属性文件中写入"1"点亮LED;传入
"off"表示熄灭LED,同样也是先调用write()将"none"写入到trigger 属性文件设置LED 为无触发,接着再向
brightness 属性文件中写入"0"熄灭LED;传入"trigger"表示设置LED 的触发模式,则需要传入第二个参数,第二个参数表示需要设置的模式。

整个代码非常简单,接下来对测试代码进行编译,需要注意的时,由于我们是在ALPHA/Mini I.MX6U
开发板上运行程序,所以需要I.MX6U 平台对应的交叉编译工具来编译测试代码,这样编译得到的可执行文件才能在开发板上运行。
首先大家需要安装I.MX6U 硬件平台对应的交叉编译工具,如何安装呢?直接参考“开发板光盘资料
A-基础资料/【正点原子】I.MX6U 用户快速体验V1.7.3.pdf”文档中的第四章内容,根据文档的指示安装好交叉编译工具,当然如果你已经在Ubuntu 系统下安装过了,就不用再次安装了。
安装完成之后,在使用之前先对交叉编译工具的环境进行设置,使用source 执行安装目录下的
environment-setup-cortexa7hf-neon-poky-linux-gnueabi 脚本文件即可,如下所示:

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

/opt/fsl-imx-x11/4.1.15-2.1.0 便是笔者在Ubuntu 系统下安装交叉编译工具时对应的安装目录,大家根据自己的情况设置正确的路径。处理完成之后,接下来我们便可以对示例代码15.3.1 进行编译了:
在这里插入图片描述
CC 变量其实就是交叉编译工具,如下所示:
在这里插入图片描述
所以CC 环境变量其实就是ARM 架构下的gcc 编译器—交叉编译工具arm-poky-linux-gnueabi-gcc,后面指定了一些选项,这些选项就不用管了;编译成功之后,会生成可在开发板上运行的可执行文件testApp,使用file 命令可以查看testApp 可执行文件的类型:
在这里插入图片描述
可以看出该文件是一个32 位ARM 架构下的可执行文件。

在开发板上测试

启动开发板进入Linux 系统,将上小节编译得到的可执行文件testApp 拷贝到开发板根文件系统中,譬如拷贝到开发板Linux 系统的家目录下,如下图所示:
在这里插入图片描述
拷贝方法很多,推荐大家使用scp 命令,这里就不再介绍了。
接下来执行testApp 程序测试:

./testApp on # 点亮LED
./testApp off # 熄灭LED
./testApp trigger heartbeat # 将LED 触发模式设置为heartbeat

在这里插入图片描述
查看LED 状态是否与程序执行的效果一致!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux系统点亮LED 的相关文章

  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im

随机推荐

  • linux下使用sed命令将文件的LF转为CRLF

    linux下使用sed命令将文件的CRLF转为LF 只要将每行中 r变成空就OK 以下命令为将file中的CRLF转为LF sed i s r g file 以下命令为将目录中 c文件和 h文件中的CRLF转为LF find regex c
  • 牛客SQL34: 牛客直播各科目同时在线人数(最大值问题)

    牛客SQL34 牛客直播各科目同时在线人数 最大值问题 内容目录 牛客SQL34 牛客直播各科目同时在线人数 最大值问题 一 描述 二 思路解析 三 代码 四 问题思考 一 描述 牛客某页面推出了数据分析系列直播课程介绍 用户可以选择报名任
  • 考研OS备考

    本文主要是考研复试备考自用 所以课后习题答案主要是简答题部分 此外还有其他的简答补充 如果发现有误 欢迎在评论区或者私信指出 计算机操作系统 汤小丹慕课版 课后习题答案 考研备考 第1章 操作系统引论 第1章 课后习题答案 第1章 零碎知识
  • 性能计数器

    性能计数器 Performance Object Counter Description Processor processor Time 指处理器执行非闲置线程时间的百分比 测量处理器繁忙的时间 这个计数器设计成用来作为处理器活动的主要指
  • 成都亚恒丰创科技USB-CAN和CAN分析仪接口方式

    USB CAN和CAN分析仪接口方式 导语 随着现代汽车电子技术的飞速发展 CAN总线成为了汽车领域中最常用的通信协议 而在进行CAN总线的调试和分析时 CAN分析仪是一种必不可少的工具 本文将介绍USB CAN接口和CAN分析仪的基本原理
  • Spring参数校验--List<E>类型参数校验

    1 遇到的问题 今天开发接口 遇到请求参数固定为List
  • 2023年第三届能源、电力与电气工程国际会议 (CoEEPE 2023)

    会议简介 Brief Introduction 2023年第三届能源 电力与电气工程国际会议 CoEEPE 2023 会议时间 2023年11月22日 24日 召开地点 澳大利亚 墨尔本 大会官网 www coeepe org 2023年第
  • Javascript:谈谈JS的全局变量跟局部变量

    今天公司一个实习小妹子问我两段JS代码的区别 我想 好简单
  • 干货分享:六个知名的Go语言web框架

    框架一直是敏捷开发中的利器 能让开发者很快的上手并做出应用 甚至有的时候 脱离了框架 一些开发者都不会写程序了 成长总不会一蹴而就 从写出程序获取成就感 再到精通框架 快速构造应用 当这些方面都得心应手的时候 可以尝试改造一些框架 或是自己
  • 【华为OD机试】 阿里巴巴找黄金宝箱(I)【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 箱子中可能有一个黄金宝箱 黄金宝箱满足排在它
  • BurpSuite实战教程01-web渗透安全测试(靶场搭建及常见漏洞攻防)

    渗透测试 渗透测试 Penetration test 即安全工程师模拟黑客 在合法授权范围内 通过信息搜集 漏洞挖掘 权限提升等行为 对目标对象进行安全测试 或攻击 最终找出安全风险并输出测试报告 Web渗透测试分为白盒测试和黑盒测试 白盒
  • 在浏览器输入URL,按下回车之后的流程?

    1 在浏览器中输入一个URL 2 查找本地配置文件 如果之前有访问过 浏览器会进行缓存 如果没有的话会在本机域名解析文件hosts文件中寻找是否存在该URL的域名映射 如Windows的配置文件 C Windows System32 dri
  • NIO初级例子

    NIO初级例子 前言 一 代码撸上 前言 使用window系统环境 window 环境测试 测试使用telnet ip 端口 win R cmd 输入telnet id port Ctrl send 发送信息 缺点 无阻塞 但是cpu空转
  • UE4_代理示例_时钟

    时钟 TimeOfDayHandler 注册代理 执行代理 Fill out your copyright notice in the Description page of Project Settings pragma once inc
  • 陇原战“疫“2021网络安全大赛 Web EasyJaba

    陇原战 疫 2021网络安全大赛 Web EasyJaba 文章目录 陇原战 疫 2021网络安全大赛 Web EasyJaba 不出网 参考链接 查看源码 禁用了一些类 这里说一下反编译工具的情况 之前我一直用的jd gui 但是本题的附
  • SQLi-LABS(21~25a关详解)

    SQLi LABS Less 21 查看题目环境 登陆给我回显的数据是I LOVE YOU COOKIES 这题看了网上的wp才知道原来是将我们的uname和passwd都进行base64编码 表示不知道怎么看出来的 Cookie unam
  • StandardScaler函数用法

    StandardScaler 是来自 sklearn preprocessing 模块的一个类 其作用是进行特征缩放 使得所有特征的均值为 0 标准差为 1 这种处理方式也被称为数据的标准化 Standardization 或者 Z Sco
  • webView打开的页面和手机浏览器打开的不一样

    同一个url 用webView打开的和直接打开的不一样 webView打开的自动就有个商品在里面了 而且按钮也点击无效 大神们帮帮忙吧
  • java socket聊天室 swing做界面 Tcp为通讯协议 支持私聊 群聊 发文件

    Java的的的的聊天室 源代码下载 首先我们来看看程序界面 丑到爆 勉强能用就行啦 第一个 登录界面 第二个 用户界面 第三个 服务器界面 好了上面三个界面是程序的主界面 下面我们先讲讲如何使用源代码 使用条件 一数据库 我这里用的MyS
  • Linux系统点亮LED

    目录 应用层操控硬件的两种方式 sysfs 文件系统 sysfs 与 sys 总结 标准接口与非标准接口 LED 硬件控制方式 编写LED 应用程序 在开发板上测试 对于一款学习型开发板来说 永远都绕不开LED 这个小小的设备 基本上每块板