OpenWRT UCI介绍及相关处理库

2023-11-04

OpenWRT UCI介绍及相关处理库


1. 前言

基本上OpenWrt上相关的配置都可以使用UCI进行配置,这对我们进行自动化配置路由器相当有帮助,我们可以很方便的将配置过程写入脚本或者写入程序,所以这里大致总结以下uci常用命令以及一些相关的库。

2. 概念

UCI系统(https://openwrt.org/zh/docs/guide-user/base-system/uci):

“uci”是“Unified Configuration Interface”(统一配置界面)的缩写,意在OpenWrt整个系统的配置集中化。

系统配置应容易,更直接且在此有文档描述,从而使你的生活更轻松!

(它是White Russian系列OpenWrt基于nvram的配置的后继改进。)

许多程序在系统某处拥有自己的配置文件,

比如/etc/network/interfaces, /etc/exports, /etc/dnsmasq.conf或者 /etc/samba/samba.conf

有时它们还使用稍有不同的语法。

在OpenWrt中你无需为此烦恼,我们只需更改UCI配置文件!

不需要为了某个更改起效而重启系统!参阅下文中的命令行实用工具以了解如何做到这点。

还有不要忘了官方程序包(official binaries)里包含了很多后台程序,但默认情况下并未启用!

比如cron后台程序默认并未激活,因而只编辑crontab并无作用。

你需要用/etc/init.d/crond start起动它或用/etc/init.d/crond enable激活它。 大部分后台程序都可以disable(禁用),stop(停止)和restart(重起)。 还有一些非UCI配置你可以参阅。

3. UCI配置文件

OpenWrt的所有配置文件皆位于/etc/config/目录下。每个文件大致与它所配置的那部分系统相关。可用文本编辑器、“uci” 命令行实用程序或各种编程API(比如 Shell, Lua and C)来编辑/修改这些配置文件。

文件位置 描述
基本配置
/etc/config/dhcp dnsmasq和DHCP的配置
/etc/config/dropbear SSH服务端选项
/etc/config/firewall 中央防火墙配置
/etc/config/network 交换,接口和路由配置
/etc/config/system 杂项与系统配置
/etc/config/timeserver rdate的时间服务器列表
/etc/config/wireless 无线设置和无线网络的定义
IPv6
/etc/config/ahcpd Ad-Hoc配置协议(AHCP) 服务端配置以及转发器配置
/etc/config/aiccu AICCU 客户端配置
/etc/config/dhcp6c WIDE-DHCPv6 客户端配置
/etc/config/dhcp6s WIDE-DHCPv6 服务端配置
/etc/config/gw6c GW6c 客户端配置
/etc/config/radvd 路由通告 (radvd) 配置
其他
/etc/config/etherwake 以太网唤醒: etherwake
/etc/config/fstab 挂载点及swap
/etc/config/hd-idle 另一个可选的硬盘空闲休眠进程(需要路由器支持usb硬盘)
/etc/config/httpd 网页服务器配置选项(Busybox 自带httpd, 已被舍弃)
/etc/config/luci 基础 LuCI 配置
/etc/config/luci_statistics 包统计配置
/etc/config/mini_snmpd mini_snmpd 配置
/etc/config/mountd OpenWrt 自动挂载进程(类似autofs)
/etc/config/multiwan 简单多WAN出口配置
/etc/config/ntpclient ntp客户端配置,用以获取正确时间
/etc/config/pure-ftpd Pure-FTPd 服务端配置
/etc/config/qos QoS配置(流量限制与整形)
/etc/config/samba samba配置(Microsoft文件共享)
/etc/config/snmpd SNMPd(snmp服务进程) 配置
/etc/config/sshtunnel sshtunnel配置
/etc/config/stund STUN 服务端配置
/etc/config/transmission BitTorrent配置
/etc/config/uhttpd Web服务器配置(uHTTPd)
/etc/config/upnpd miniupnpd UPnP服务器配置
/etc/config/ushare uShare UPnP 服务器配置
/etc/config/vblade vblade 用户空间AOE(ATA over Ethernet)配置
/etc/config/vnstat vnstat 下载器配置
/etc/config/wifitoogle 使用按钮来开关WiFi的脚本
/etc/config/wol Wake-on-Lan: wol
/etc/config/znc ZNC 配置

4. 文件语法

在UCI的配置文件通常包含一个或多个配置语句,包含一个或多个用来定义实际值的选项语句的所谓的节。

下面是一个简单的配置示例文件:

package 'example'

config 'example' 'test'
        option   'string'      'some value'
        option   'boolean'     '1'
        list     'collection'  'first item'
        list     'collection'  'second item'
  • config ‘example’ ‘test’ 语句标志着一个节(section)的开始。这里的配置类型(secType)是example,配置名(option)是test。配置中也允许出现匿名节,即自定义了配置类型,而没有配置名的节。配置类型对应配置处理程序来说是十分重要的,因为配置程序需要根据这些信息来处理这些配置项。

  • option 'string' 'some value'option 'boolean' '1'定义了一些简单值。文本选项和布尔选项在语法上并没有差异。布尔选项中可以用’0’ , ‘no’, ‘off’, 或者’false’来表示false值,或者也可以用’1’, ‘yes’,'on’或者’true’来表示真值。

  • 以list关键字开头的多个行,可用于定义包含多个值的选项。所有共享一个名称的list语句,会组装形成一个值列表,列表中每个值出现的顺序,和它在配置文件中的顺序相同。如上例中,列表的名称是’collection’,它包含了两个值,即’first item’和’second item’。

  • 'option’和’list’语句的缩进可以增加配置文件的可读性,但是在语法不是必须的。

通常不需要为标识符和值加引号,只有当值包括空格或者制表符的时候,才必须加引号。同时,在使用引号的时候,可以用双引号代替单引号。

下面列举的例子都是符合uci语法的正确配置:

  • option example value
  • option 'example' value
  • option example “value”
  • option “example” 'value'
  • option 'example' “value”

反之,以下配置则存在语法错误

  • option 'example“ “value'(引号不匹配)
  • option example some value with space(值中包含空格,需要为值加引号)

还有一点是必须知道的,即UCI标识符和配置文件名称所包含的字符必须是由a-z0-9_组成。 选项值则可以包含任意字符,只要这个值是加了引号的。

5. 命令行实用工具

使用awk、grep等命令来解析Openwrt的配置文件是低效和不明智的做法,建议用户通过uci工具对openwrt进行配置。

下面将给出一些例子,来展示uci这个强大的工具。

5.1 用法

root@OpenWrt:~# uci
Usage: uci [<options>] <command> [<arguments>]

Commands:
        batch
        export     [<config>]
        import     [<config>]
        changes    [<config>]
        commit     [<config>]
        add        <config> <section-type>
        add_list   <config>.<section>.<option>=<string>
        del_list   <config>.<section>.<option>=<string>
        show       [<config>[.<section>[.<option>]]]
        get        <config>.<section>[.<option>]
        set        <config>.<section>[.<option>]=<value>
        delete     <config>[.<section>[[.<option>][=<id>]]]
        rename     <config>.<section>[.<option>]=<name>
        revert     <config>[.<section>[.<option>]]
        reorder    <config>.<section>=<position>

Options:
        -c <path>  set the search path for config files (default: /etc/config)
        -d <str>   set the delimiter for list values in uci show
        -f <file>  use <file> as input instead of stdin
        -m         when importing, merge data into an existing package
        -n         name unnamed sections on export (default)
        -N         don't name unnamed sections
        -p <path>  add a search path for config change files
        -P <path>  add a search path for config change files and use as default
        -q         quiet mode (don't print error messages)
        -s         force strict mode (stop on parser errors, default)
        -S         disable strict mode
        -X         do not use extended syntax on 'show'

5.2 示例

导出整个配置

root@OpenWrt:~# uci export uhttpd
package uhttpd

config uhttpd 'main'
        list listen_https '0.0.0.0:443'
        list listen_https '[::]:443'
        option redirect_https '0'
        option home '/www'
        option rfc1918_filter '0'
        option max_requests '3'
        option max_connections '100'
        option cert '/etc/uhttpd.crt'
        option key '/etc/uhttpd.key'
        option cgi_prefix '/cgi-bin'
        list lua_prefix '/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua'
        option script_timeout '60'
        option network_timeout '30'
        option http_keepalive '20'
        option tcp_keepalive '1'
        list listen_http '0.0.0.0:81'
        list listen_http '[::]:81'
        list listen_http '0.0.0.0:8082'

config cert 'defaults'
        option days '730'
        option key_type 'rsa'
        option bits '2048'
        option ec_curve 'P-256'
        option country 'ZZ'
        option state 'Somewhere'
        option location 'Unknown'
        option commonname 'OpenWrt'

查看所有配置项的值

root@OpenWrt:~# uci show uhttpd
uhttpd.main=uhttpd
uhttpd.main.listen_https='0.0.0.0:443' '[::]:443'
uhttpd.main.redirect_https='0'
uhttpd.main.home='/www'
uhttpd.main.rfc1918_filter='0'
uhttpd.main.max_requests='3'
uhttpd.main.max_connections='100'
uhttpd.main.cert='/etc/uhttpd.crt'
uhttpd.main.key='/etc/uhttpd.key'
uhttpd.main.cgi_prefix='/cgi-bin'
uhttpd.main.lua_prefix='/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua'
uhttpd.main.script_timeout='60'
uhttpd.main.network_timeout='30'
uhttpd.main.http_keepalive='20'
uhttpd.main.tcp_keepalive='1'
uhttpd.main.listen_http='0.0.0.0:81' '[::]:81' '0.0.0.0:8082'
uhttpd.defaults=cert
uhttpd.defaults.days='730'
uhttpd.defaults.key_type='rsa'
uhttpd.defaults.bits='2048'
uhttpd.defaults.ec_curve='P-256'
uhttpd.defaults.country='ZZ'
uhttpd.defaults.state='Somewhere'
uhttpd.defaults.location='Unknown'
uhttpd.defaults.commonname='OpenWrt'

查看特定选项的值

root@OpenWrt:~# uci get uhttpd.@uhttpd[0].listen_http
0.0.0.0:81 [::]:81 0.0.0.0:8082

查看网络接口的状态

root@OpenWrt:~# uci -P/var/state show network.wan
network.wan=interface
network.wan.ifname='eth7'
network.wan.proto='dhcp'

root@OpenWrt:~# uci -P/var/state show network.wan_eth
network.wan_eth=interface
network.wan_eth.ifname='eth0'
network.wan_eth.proto='static'
network.wan_eth.netmask='255.255.255.0'
network.wan_eth.gateway='192.168.67.254'
network.wan_eth.dns='8.8.8.8'
network.wan_eth.ipaddr='192.168.67.87'
network.wan_eth.up='1'

添加防火墙规则

这是一个添加SSH端口转发到防火墙规则的例子,和’-1’使用的一个例子。

root@OpenWrt:~# uci add firewall rule
root@OpenWrt:~# uci set firewall.@rule[-1].src=wan 
root@OpenWrt:~# uci set firewall.@rule[-1].target=ACCEPT 
root@OpenWrt:~# uci set firewall.@rule[-1].proto=tcp 
root@OpenWrt:~# uci set firewall.@rule[-1].dest_port=22 
root@OpenWrt:~# uci commit firewall
root@OpenWrt:~# /etc/init.d/firewall restart

5.3 场景示例

更改uhttpd监听端口

比如我们要将我们的配置web配置到80端口,这就需要更改uhttpd默认监听的80端口为其它端口,这里就可以将该更改uhttpd监听80端口更改为81端口的过程写入shell脚本执行,以此方便一键化部署配置web(当然实际批量生产时打包固件即可),如下是将该过程简单写为shell函数的代码(会将原本的uhttpd配置文件备份,然后判断相关端口是否被监听,是则删除后增加,由于list没有更改功能所以实用删除后增加的方式进行修改):

# 利用uci命令修改uhttpd对80端口和8080端口的监听,便于nginx监听80端口方便访问自研配置web
function uhttpd_uci_conf() {
        echo "--------------------设置uhttpd监听端口---------------"
        uhttpd_back="/etc/config/uhttpd_back"
        # 这里的-f参数判断$myFile是否存在
        if [ ! -f "$uhttpd_back" ]; then
                cp /etc/config/uhttpd $uhttpd_back
        fi
        echo "###old uhttpd info:"
        uci show uhttpd

        listen_http1='0.0.0.0:80'
        listen_http2='[::]:80'
        listen_http3='0.0.0.0:8080'
        if ! grep "$listen_http1" /etc/config/uhttpd  >/dev/null
        then
        #不存在,不做处理
                echo "uhttpd not listen 80 port."
        else
        #存在,删除,然后添加81端口
                uci del_list uhttpd.main.listen_http='0.0.0.0:80'
                uci del_list uhttpd.main.listen_http='[::]:80'
                uci del_list uhttpd.main.listen_http='0.0.0.0:8080'

                uci add_list uhttpd.main.listen_http='0.0.0.0:81'
                uci add_list uhttpd.main.listen_http='[::]:81'
                uci add_list uhttpd.main.listen_http='0.0.0.0:8082'

                uci commit
                echo "###new uhttpd info:"
                uci show uhttpd
        fi
        echo "--------------------设置uhttpd监听端口完成-----------"
}

配置端口转发

此外,可以设想一下如下场景,我们将家里某个子设备PC当成服务器,而该PC的外网IP取决于路由器配置的外网IP,这时我们可以将PC的IP设置为静态IP,然后将其某些端口映射到路由器的外网IP某些端口上,这样我们就可以访问外网IP某个端口来访问PC上的对应端口了,一些大的资源不用放在路由器上我们外网也可以访问,搭建个人云盘、个人服务器都变得可行(自媒体这么火,在隐私越来越重视的情况下,我想未来将服务器、网盘等都建立在自己家中这种事也会有一定的市场空间,而ipv6普及之后外网IP的制约条件也会消失)。

这里是一个简单的端口映射shell脚本函数(可以将这些参数以外部传参的方式或者配置文件的形式读取都可以):

function add_redirect() {
	uci add firewall redirect
	uci set firewall.@redirect[-1].dest_port='80'
	uci set firewall.@redirect[-1].src='wan'
	uci set firewall.@redirect[-1].src_dport='10080'
	uci set firewall.@redirect[-1].target='DNAT'
	uci set firewall.@redirect[-1].dest_ip='192.168.1.200'
	uci set firewall.@redirect[-1].dest='lan'
	uci commit
	
	/etc/init.d/firewall restart
	uci show firewall
}

6. 常用的库

luci:包含Lua和js以及c的接口,所以熟悉前端和openwrt的完全可以用js进行openwrt配置:https://github.com/openwrt/luci

go-uci:https://github.com/digineo/go-uci

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

OpenWRT UCI介绍及相关处理库 的相关文章

  • openwrt下crontab定时任务实现

    openwrt下crontab定时任务实现 我的需求是需要加个定时执行脚本来监控智能网关运行的进程 一旦网关进程异常关闭 就能立即把它拉起来 从而保证网关运行的可靠性 这里我们用到了crontab服务 OpenWRT系统默认已经加入了cro
  • OpenWrt目录结构及编译过程

    OpenWrt代码有8个固定的顶层目录以及7个编译时创建的临时目录 顶层目录 docs docs目录 用于存放开发文档 编译时不需要 包含了整个宿主机的文件源码的介绍 里面还有Makefile为目标系统生成docs 使用make C doc
  • Openwrt编译报错 TCP Fast Open is not available for client mode 的解决办法

    报错信息 configure error TCP Fast Open is not available for client mode please rerun without enable tfo client gmake 3 Makef
  • ubuntu18.04编译Openwrt出现的问题解决

    ubuntu18 04编译Openwrt出现的问题解决 问题1 Build dependency Please install Git git core gt 1 6 5 问题2 gdate c 2497 7 error format no
  • Buildroot用户指南

    第一章 关于Buildroot Buildroot是一个包含Makefile和修补程序 patch 的集合 这个集合可以使你很容易的为你的目标构建交叉工具链 cross compilationtoolchain 根文件系统 root fil
  • OPENWRT中SSH免密钥登陆(详细步骤)

    通过使用ssh keygen生成公钥 在两台机器之间互相建立新人通道极客 假设本地机器是client 远程机器为server 1 使用ssh keygen生成rsa keygen 在这里会覆盖以前生成的 ssh id rsa文件 请提前做好
  • openwrt luci使用本地软件源更新软件包,更新package.sig签名

    官方的源在国外 一般访问速度比较慢 本地源可以快速解决这个问题 有时自己编译的软件升级发布版本使用本地源 能够更好的维护与安装 为了保证兼容性 尽量使用同一个源提供的SDK打包的源软件 把编译出来的ipk文件上传到本地服务器 在索引中添加新
  • 取消GL.iNet路由器视频的密码

    每次路由器访问192 168 8 1 8083 action stream时总是无法访问 但是先进入192 168 8 1登录以后再去刷新视频就可以出来 即使取消外网登录验证也还是没效果 最后发现广大网友的意见是重新刷固件 先去GL iNe
  • 青龙脚本 小黄鸟配合虚拟机抓变量 软件集

    鉴于很多青龙脚本变量 真机很难抓到 需要小黄鸟配合虚拟机抓变量 为方便网友 把相关3个软件分享 以单个文件形式 1 小黄鸟 https wwm lanzouy com i5vWT01qi6na 2 虚拟机 https wwm lanzouy
  • 703n无法进入路由管理界面reset无效重刷方法

    现在没法接网线获取不到地址 winscp也登不了 请问除了ttl线外不拆机能重刷吗 安全模式恢复 具体方法如下 网线连接电脑和703n 设置电脑ip地址为192 168 1 2 掩码默认 网关192 168 1 1 电脑 gt 开始 gt
  • OpenWRT编译错误:Package missing dependencies for the following libraries

    发现问题 今天在 OpenWRT 上增加了个 package 编译的时候 报出如下错误 Package test modules is missing dependencies for the following libraries lib
  • 基于openwrt,aria2下载器安装与配置

    迅雷下载不好用 所以用这个下载器aria2 需要安装软件 在可用软件列表中安装aria2和luci app aria2 安装完后有可能需要重启路由器 需要注意的问题 1 aria2只是一个下载工具 并没有图形界面 2 文件下载的位置 在ar
  • 【openwrt学习笔记】dnsmasq源码阅读

    目录 一 DHCP Dynamic Host Configuration Protocol 1 1 前置知识 1 2 参考链接 1 3 IP地址分配代码分析 rfc2131 c dhcp common c dhcp c 1 4 几个小问题
  • opkg 更新软件

    opkg 不同的版本存在不同的配置文件 一般常用的是 etc opkg conf etc opkg customfeeds conf 和 etc opkg distfeeds conf三个 这三个配置文件将会影响opkg运行时软件资源的取向
  • 从零开始编译OpenWrt固件

    从零开始编译OpenWrt固件 前言 进来阅读这篇文章的相信都是对OpenWrt有一定的了解的 对于OpenWrt的介绍这里就不再赘述 可以自行查找相关百科了解 OpenWrt是适合于嵌入式设备的一个Linux发行版 可以通过其提供的相关工
  • OpenWRT添加模块(一)Makefile和Config.in

    第一次接触到openwrt 真是被毁三观啊 不要说makefile 连源代码在哪里都找不到 知道嵌入式系统水深 没想到迈出第一步就没过了脖子 好在旁边有人指点 直接在芯片厂商提供的既有代码上做二次开发 项目进展倒也完全满足了前期计划的目标
  • OpenWrt添加软件包(一)

    本文参考https wiki openwrt org zh cn doc devel packages http blog csdn net teddy99999 article details 17537545 OpenWrt是一个比较完
  • 为什么在 Makefile 中安装文件时 $(INSTALL_BIN) 和 $(INSTALL_DATA) 总是删除软链接

    在 OpenWrt 包 Makefile 的安装部分 以下代码将从 lib 文件中删除软链接并将实例复制到 1 在构建 编译部分 我们在 PKG BUILD DIR 下构建了 3 个库 PKG BUILD DIR libapi so gt
  • OpenWRT git clone fatal:无法找到“http”的远程帮助程序

    我正在尝试将 LINC Switch 安装到 OpenWRT 并遇到以下问题 git clone https github com FlowForwarding LINC Switch git 并得到一个错误 git fatal Unabl
  • 如何知道我的二进制可执行文件的内存占用量

    我想知道是否有办法知道用 C 语言编码的二进制可执行文件的内存占用量 有关二进制可执行文件的信息 使用OpenWrt分支 Attitude Adjustment 的工具链编译 架构为x86 在 Linux Unix 系统上 您可以使用siz

随机推荐

  • 51单片机 数码管的静态显示和动态显示

    51单片机 数码管的静态显示和动态显示 数码管 Segment Displays 由多个发光二极管封装在一起组成 8 字型的器件 引线已在内部连接完成 只需引出它们的各个笔划 公共电极 数码管实际上是由七个发光管组成8字形构成的 加上小数点
  • ts如何使用终端直接输出console(基础教程)

    安装 typescript npm install g typescript 安装 ts node npm install g ts node 新建一个ts文件 比如 demo ts function add n1 number n2 nu
  • 前端安全总结

    你的服务器安全么 1 概述 在本人所处的公司的服务器正式遭到黑客攻击之前 一直都以为 黑客 是个遥不可及的词 直到真正成为了受害者时 才猛然意识到安全的重要性 有一些基本经验和心得总结出来 和同行分享一下吧 2 暴破手段 最粗暴的黑客行为
  • AB test 之 广告投放(二)

    在广告投放的A B测试中 有几个重要的注意要点需要考虑 目标和假设 明确测试的目标 并基于此制定假设 确定您希望测试的指标 例如点击率 转化率 收入等 并提出假设 即测试组和对照组之间是否存在显著差异 随机分组 确保测试组和对照组的分配是随
  • 【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (5) AI编程自动写代码

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 AI 编程自动代码生成 AI现在真的是无敌 连代码都可以生成 我的天 看来程序员失业
  • Conflux Hydra网络Hardfork升级已完成(2022.02.28)

    Conflux Hydra 网络 Hardfork 升级已经完成 目前网络状态稳定 最新网络版本号 v2 0 0 fix END 了解最新动态
  • Java单例模式(解决反射攻击,反序列化攻击)

    单例模式 什么是单例模式 单例模式就是确保类的实例对象只能有一个 类本身要实例化好这个对象提供给其他所有的类访问 单例模式就是为了避免状态不一致 单例模式特定 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象
  • 雷军的发布会,真狠呀!

    在雷军演讲前 人物 用今年的热搜话题向雷军进行了提问 问题1 年年演讲灌鸡汤 算是卖成功学吗 雷军 成功学 说实话我真的不太懂 我每年办演讲 主要想跟大家分享一些我成长的经历 问题2 把失败经历当笑话讲 这心态要怎么练 雷军 刚开始的时候我
  • 比较运算符、逻辑运算符

    不管是比较运算符还是逻辑运算符 重点都是运算 是运算的话都会得到一个结果值 先说比较运算符 大概就是上面这些运算符 看运算符怎么运算的 直接判断这个比较逻辑上是不是正确的 就比如4 3 很明显是正确的 结果是正确的 值是用布尔值表示的也就是
  • 创建带图文的超级菜单(导航菜单)(二)

    Avada带有一个超级菜单功能 基本是在WP原有的基础上扩充的 功能还是挺好用 下面说下如何创建比较漂亮的超级菜单 此文内容主要在于理解超级菜单和其他项目的逻辑关系 搞清楚它的逻辑你就好操作了 本文目录 1 整体思路 2 其他须知 3 创建
  • 关于微信小程序开发中input、textarea等表单组件在键盘弹起时,页面显示内容被挤出顶部导航栏,解决方案的建议

    关于微信小程序开发中input textarea等表单组件在键盘弹起时 页面显示内容被挤出顶部导航栏 解决方案的建议 代码附图 希望采纳 键盘弹起时 解决键盘遮挡问题 开启键盘时 function keyboardOcclusion e i
  • java 调用C#语言写的dll文件代码 超详细过程

    前言 最近在编写项目时候 遇到了java调用C 类库的情况 试了很多种方法 也遇到了很多坑 解决之后写下来 作为记录和分享给有用的朋友们 在这里我用的工具是jni4net 0 8 8 0 Visual Studio2015 一 编写C 类库
  • [人工智能AI]之贝叶斯网络

    人工智能AI 之贝叶斯网络 Bayesian network 部分图片和来源自 NJU 人工智能 高阳教授 的课件 通俗地讲 贝叶斯网络就是用一组有向无环图 表示多个事件的因果依赖关系 并借此完成相关推理计算 1 贝叶斯定理 条件概率 这里
  • linux服务器上部署多个vue项目(使用相同的ip(域名)及端口号)

    linux服务器上部署多个vue vue2 0 项目 使用相同的ip 域名 及端口号 1 首先想要实现的效果为 http ip 端口号 a 注 a代表a项目 http ip 端口号 b 注 b代表b项目 2 linux的文件路径为 3 此时
  • Qt迭代器(Java类型和STL类型)介绍

    一 介绍 遍历一个容器可以使用迭代器 iterators 来完成 迭代器提供了一个统一的方法来访问容器中的元素 而Qt的容器类提供了两种类型的迭代器 Java风格迭代器和STL风格迭代器 二 Java 类型迭代器 对于每个容器类 有两个 J
  • 【不定期更新-优化专题】

    文章目录 前言 一 学习资料类 前言 目前正在学习中 该专题主要用于分享自己的学习路线 工具 笔记等 欢迎交流与指正 一 学习资料类 视频 https www bilibili com video BV1Jt411p7jE 书籍下载 htt
  • VS:让程序运行完后不直接关闭

    Issue 控制台一闪而过 看不到输出结果 如何保持控制台窗口 让程序运行完后不直接关闭 Solve 1 推荐 建议设置项目属性 1 右键项目 gt gt 属性 Properties 打开项目的属性页 2 项目的属性页下 找到 配置属性 C
  • SQL语句优化问题

    有时返回数据时 需要有三张或以上的表需要查询 一张表的数据往往需要连接多张 效率非常的差 SELECT user id user uuid user user name AS username user login name name us
  • 测试项目:车牌检测,行人检测,红绿灯检测,人流检测,目标识别

    本项目为2020年中国软件杯 组第一批赛题 基于计算机视觉的交通场景智能应用 项目用python实现 主要使用YOLO模型实现道路目标如人 车 交通灯等物体的识别 使用开源的 中文车牌识别HyperLPR 项目实现车牌识别功能 github
  • OpenWRT UCI介绍及相关处理库

    OpenWRT UCI介绍及相关处理库 文章目录 OpenWRT UCI介绍及相关处理库 1 前言 2 概念 3 UCI配置文件 4 文件语法 5 命令行实用工具 5 1 用法 5 2 示例 导出整个配置 查看所有配置项的值 查看特定选项的