openwrt php 调用,openwrt在脚本中调用UCI接口, 非常值得学习

2023-11-15

#!/bin/sh

# Copyright (C) 2006-2013 OpenWrt.org

# Copyright (C) 2006 Fokus Fraunhofer

# Copyright (C) 2010 Vertical Communications

debug () {

${DEBUG:-:} "$@"

}

# newline

N="

"

_C=0

NO_EXPORT=1

LOAD_STATE=1

LIST_SEP=" "

hotplug_dev() {

env -i ACTION=$1 INTERFACE=$2 /sbin/hotplug-call net

}

append() {

local var="$1"

local value="$2"

local sep="${3:- }"

eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""

}

list_contains() {

local var="$1"

local str="$2"

local val

eval "val=\" \${$var} \""

[ "${val%% $str *}" != "$val" ]

}

list_remove() {

local var="$1"

local remove="$2"

local val

eval "val=\" \${$var} \""

val1="${val%% $remove *}"

[ "$val1" = "$val" ] && return

val2="${val##* $remove }"

[ "$val2" = "$val" ] && return

val="${val1## } ${val2%% }"

val="${val%% }"

eval "export ${NO_EXPORT:+-n} -- \"$var=\$val\""

}

config_load() {

[ -n "$IPKG_INSTROOT" ] && return 0

uci_load "$@"    #

}

reset_cb() {

config_cb() { return 0; }

option_cb() { return 0; }

list_cb() { return 0; }

}

reset_cb

package() {

return 0

}

config () {

local cfgtype="$1"

local name="$2"

export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))

name="${name:-cfg$CONFIG_NUM_SECTIONS}"

append CONFIG_SECTIONS "$name"

[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"

export ${NO_EXPORT:+-n} CONFIG_SECTION="$name"

export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"

}

option () {

local varname="$1"; shift

local value="$*"

export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_${varname}=$value"

[ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"

}

list() {

local varname="$1"; shift

local value="$*"

local len

config_get len "$CONFIG_SECTION" "${varname}_LENGTH" 0

[ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}"

len=$(($len + 1))

config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"

config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"

append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP"

list_cb "$varname" "$*"

}

config_rename() {

local OLD="$1"

local NEW="$2"

local oldvar

local newvar

[ -n "$OLD" -a -n "$NEW" ] || return

for oldvar in `set | grep ^CONFIG_${OLD}_ | \

sed -e 's/\(.*\)=.*$/\1/'` ; do

newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}"

eval "export ${NO_EXPORT:+-n} \"$newvar=\${$oldvar}\""

unset "$oldvar"

done

export ${NO_EXPORT:+-n} CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")"

[ "$CONFIG_SECTION" = "$OLD" ] && export ${NO_EXPORT:+-n} CONFIG_SECTION="$NEW"

}

config_unset() {

config_set "$1" "$2" ""

}

config_clear() {

local SECTION="$1"

local oldvar

list_remove CONFIG_SECTIONS "$SECTION"

export ${NO_EXPORT:+-n} CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}"

for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \

sed -e 's/\(.*\)=.*$/\1/'` ; do

unset $oldvar

done

}

# config_get []

# config_get

config_get() {

case "$3" in

"") eval echo "\${CONFIG_${1}_${2}:-\${4}}";;

*) eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;

esac

}

# config_get_bool []

config_get_bool() {

local _tmp

config_get _tmp "$2" "$3" "$4"

case "$_tmp" in

1|on|true|enabled) _tmp=1;;

0|off|false|disabled) _tmp=0;;

*) _tmp="$4";;

esac

export ${NO_EXPORT:+-n} "$1=$_tmp"

}

config_set() {

local section="$1"

local option="$2"

local value="$3"

local old_section="$CONFIG_SECTION"

CONFIG_SECTION="$section"

option "$option" "$value"

CONFIG_SECTION="$old_section"

}

config_foreach() {

local ___function="$1"

[ "$#" -ge 1 ] && shift

local ___type="$1"

[ "$#" -ge 1 ] && shift

local section cfgtype

[ -z "$CONFIG_SECTIONS" ] && return 0

for section in ${CONFIG_SECTIONS}; do

config_get cfgtype "$section" TYPE

[ -n "$___type" -a "x$cfgtype" != "x$___type" ] && continue

eval "$___function \"\$section\" \"\$@\""

done

}

config_list_foreach() {

[ "$#" -ge 3 ] || return 0

local section="$1"; shift

local option="$1"; shift

local function="$1"; shift

local val

local len

local c=1

config_get len "${section}" "${option}_LENGTH"

[ -z "$len" ] && return 0

while [ $c -le "$len" ]; do

config_get val "${section}" "${option}_ITEM$c"

eval "$function \"\$val\" \"\$@\""

c="$(($c + 1))"

done

}

insert_modules() {

[ -d /etc/modules.d ] && {

cd /etc/modules.d

sed 's/^[^#]/insmod &/' $* | ash 2>&- || :

}

}

include() {

local file

for file in $(ls $1/*.sh 2>/dev/null); do

. $file

done

}

find_mtd_index() {

local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"

local INDEX="${PART##mtd}"

echo ${INDEX}

}

find_mtd_part() {

local INDEX=$(find_mtd_index "$1")

local PREFIX=/dev/mtdblock

[ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/

echo "${INDEX:+$PREFIX$INDEX}"

}

find_mtd_chardev() {

local INDEX=$(find_mtd_index "$1")

local PREFIX=/dev/mtd

[ -d /dev/mtd ] && PREFIX=/dev/mtd/

echo "${INDEX:+$PREFIX$INDEX}"

}

mtd_get_mac_ascii()

{

local mtdname="$1"

local key="$2"

local part

local mac_dirty

part=$(find_mtd_part "$mtdname")

if [ -z "$part" ]; then

echo "mtd_get_mac_ascii: partition $mtdname not found!" >&2

return

fi

mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p')

# "canonicalize" mac

[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty"

}

mtd_get_blob()

{

local mtdname="$1"

local offset="$2"

local count="$3"

local firmware="$4"

local part

part=$(find_mtd_part "$mtdname")

if [ -z "$part" ]; then

echo "mtd_get_blob: partition $mtdname not found!" >&2

return 1

fi

dd if=$part of=$firmware bs=1 skip=$offset count=$count 2>/dev/null || {

echo "mtd_get_blob: failed to extract $firmware from $part" >&2

return 1

}

}

mtd_get_mac_binary() {

local mtdname="$1"

local offset="$2"

local part

part=$(find_mtd_part "$mtdname")

if [ -z "$part" ]; then

echo "mtd_get_mac_binary: partition $mtdname not found!" >&2

return

fi

dd bs=1 skip=$offset count=6 if=$part 2>/dev/null | hexdump -v -n 6 -e '5/1 "%02x:" 1/1 "%02x"'

}

mtd_get_part_size() {

local part_name=$1

local first dev size erasesize name

while read dev size erasesize name; do

name=${name#'"'}; name=${name%'"'}

if [ "$name" = "$part_name" ]; then

echo $((0x$size))

break

fi

done < /proc/mtd

}

macaddr_add() {

local mac=$1

local val=$2

local oui=${mac%:*:*:*}

local nic=${mac#*:*:*:}

nic=$(printf "%06x" $((0x${nic//:/} + $val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/')

echo $oui:$nic

}

macaddr_setbit_la()

{

local mac=$1

printf "%02x:%s" $((0x${mac%%:*} | 0x02)) ${mac#*:}

}

macaddr_2bin()

{

local mac=$1

echo -ne \\x${mac//:/\\x}

}

macaddr_canonicalize()

{

local mac="$1"

local canon=""

[ ${#mac} -gt 17 ] && return

[ -n "${mac//[a-fA-F0-9\.: -]/}" ] && return

for octet in ${mac//[\.:-]/ }; do

case "${#octet}" in

1)

octet="0${octet}"

;;

2)

;;

4)

octet="${octet:0:2} ${octet:2:2}"

;;

12)

octet="${octet:0:2} ${octet:2:2} ${octet:4:2} ${octet:6:2} ${octet:8:2} ${octet:10:2}"

;;

*)

return

;;

esac

canon=${canon}${canon:+ }${octet}

done

[ ${#canon} -ne 17 ] && return

printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${canon// / 0x} 2>/dev/null

}

strtok() { # { [] ... }

local tmp

local val="$1"

local count=0

shift

while [ $# -gt 1 ]; do

tmp="${val%%$2*}"

[ "$tmp" = "$val" ] && break

val="${val#$tmp$2}"

export ${NO_EXPORT:+-n} "$1=$tmp"; count=$((count+1))

shift 2

done

if [ $# -gt 0 -a -n "$val" ]; then

export ${NO_EXPORT:+-n} "$1=$val"; count=$((count+1))

fi

return $count

}

jffs2_mark_erase() {

local part="$(find_mtd_part "$1")"

[ -z "$part" ] && {

echo Partition not found.

return 1

}

echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1"

}

uci_apply_defaults() {

cd /etc/uci-defaults || return 0

files="$(ls)"

[ -z "$files" ] && return 0

mkdir -p /tmp/.uci

for file in $files; do

( . "./$(basename $file)" ) && rm -f "$file"

done

uci commit

}

group_add() {

local name="$1"

local gid="$2"

local rc

[ -f "${IPKG_INSTROOT}/etc/group" ] || return 1

[ -n "$IPKG_INSTROOT" ] || lock /var/lock/group

echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group

rc=$?

[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group

return $rc

}

group_exists() {

grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/group

}

user_add() {

local name="${1}"

local uid="${2}"

local gid="${3:-$2}"

local desc="${4:-$1}"

local home="${5:-/var/run/$1}"

local shell="${6:-/bin/false}"

local rc

[ -f "${IPKG_INSTROOT}/etc/passwd" ] || return 1

[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd

echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd

echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow

rc=$?

[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd

return $rc

}

user_exists() {

grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/passwd

}

pi_include() {

if [ -f "/tmp/overlay/$1" ]; then

. "/tmp/overlay/$1"

elif [ -f "$1" ]; then

. "$1"

elif [ -d "/tmp/overlay/$1" ]; then

if [ -n "$(ls /tmp/overlay/$1/*.sh 2>/dev/null)" ]; then

for src_script in /tmp/overlay/$1/*.sh; do

. "$src_script"

done

fi

elif [ -d "$1" ]; then

if [ -n "$(ls $1/*.sh 2>/dev/null)" ]; then

for src_script in $1/*.sh; do

. "$src_script"

done

fi

else

echo "WARNING: $1 not found"

return 1

fi

return 0

}

boot_hook_splice_start() {

export -n PI_HOOK_SPLICE=1

}

boot_hook_splice_finish() {

local hook

for hook in $PI_STACK_LIST; do

local v; eval "v=\${${hook}_splice:+\$${hook}_splice }$hook"

export -n "${hook}=${v% }"

export -n "${hook}_splice="

done

export -n PI_HOOK_SPLICE=

}

boot_hook_init() {

local hook="${1}_hook"

export -n "PI_STACK_LIST=${PI_STACK_LIST:+$PI_STACK_LIST }$hook"

export -n "$hook="

}

boot_hook_add() {

local hook="${1}_hook${PI_HOOK_SPLICE:+_splice}"

local func="${2}"

[ -n "$func" ] && {

local v; eval "v=\$$hook"

export -n "$hook=${v:+$v }$func"

}

}

boot_hook_shift() {

local hook="${1}_hook"

local rvar="${2}"

local v; eval "v=\$$hook"

[ -n "$v" ] && {

local first="${v%% *}"

[ "$v" != "${v#* }" ] && \

export -n "$hook=${v#* }" || \

export -n "$hook="

export -n "$rvar=$first"

return 0

}

return 1

}

boot_run_hook() {

local hook="$1"

local func

while boot_hook_shift "$hook" func; do

local ran; eval "ran=\$PI_RAN_$func"

[ -n "$ran" ] || {

export -n "PI_RAN_$func=1"

$func "$1" "$2"

}

done

}

jffs2_ready() {

mtdpart="$(find_mtd_part rootfs_data)"

[ -z "$mtdpart" ] && return 1

magic=$(hexdump $mtdpart -n 4 -e '4/1 "%02x"')

[ "$magic" != "deadc0de" ]

}

dupe() { #

cd $1

echo -n "creating directories... "

{

cd $2

find . -xdev -type d

echo "./dev ./overlay ./mnt ./proc ./tmp"

# xdev skips mounted directories

cd $1

} | xargs mkdir -p

echo "done"

echo -n "setting up symlinks... "

for file in $(cd $2; find . -xdev -type f;); do

case "$file" in

./rom/note) ;; #nothing

./etc/config*|\

./usr/lib/opkg/info/*) cp -af $2/$file $file;;

*) ln -sf /rom/${file#./*} $file;;

esac

done

for file in $(cd $2; find . -xdev -type l;); do

cp -af $2/${file#./*} $file

done

echo "done"

}

pivot() { #

/bin/mount -o noatime,move /proc $1/proc && \

pivot_root $1 $1$2 && {

/bin/mount -o noatime,move $2/dev /dev

/bin/mount -o noatime,move $2/tmp /tmp

/bin/mount -o noatime,move $2/sys /sys 2>&-

/bin/mount -o noatime,move $2/overlay /overlay 2>&-

return 0

}

}

fopivot() { #

root=$1

{

if grep -q overlay /proc/filesystems; then

/bin/mount -o noatime,lowerdir=/,upperdir=$1 -t overlayfs "overlayfs:$1" /mnt && root=/mnt

elif grep -q mini_fo /proc/filesystems; then

/bin/mount -t mini_fo -o noatime,base=/,sto=$1 "mini_fo:$1" /mnt 2>&- && root=/mnt

else

/bin/mount --bind -o noatime / /mnt

/bin/mount --bind -o noatime,union "$1" /mnt && root=/mnt

fi

} || {

[ "$3" = "1" ] && {

/bin/mount | grep "on $1 type" 2>&- 1>&- || /bin/mount -o noatime,bind $1 $1

dupe $1 $rom

}

}

pivot $root $2

}

ramoverlay() {

mkdir -p /tmp/root

/bin/mount -t tmpfs -o noatime,mode=0755 root /tmp/root

fopivot /tmp/root /rom 1

}

[ -z "$IPKG_INSTROOT

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

openwrt php 调用,openwrt在脚本中调用UCI接口, 非常值得学习 的相关文章

  • JAVA 正则表达式 (超详细) .

    在Sun的Java JDK 1 40版本中 Java自带了支持正则表达式的包 本文就抛砖引玉地介绍了如何使用java util regex包 可粗略估计一下 除了偶尔用Linux的外 其他Linu x用户都会遇到正则表达式 正则表达式是个极
  • java 交流学习微信群

    专注Java相关技术 SSM Spring全家桶 微服务 MySQL 集群 dubbo 分布式 中间件 Linux 网络 多线程 Jenkins Nexus Docker ELK等等 相关开发的兼职信息等 微信 18210730150 由于
  • SQL server基本的代码操作

    一 数据库相关操作 1 创建数据库 创建一个具有2个文件组的数据库test1 要求 1 主文件组包括文件test1 dat1 文件初始大小为20 MB 最大为60 MB 按5 MB增长 2 文件组test1 Group1包括文件test1
  • 智力题:砝码称重问题

    第一题 假设有280g食盐 有一架天平 有两个砝码 分别是14g 4g 请问能否在3次内将280g食盐分为100g和180g两堆 请详细描述你的解决方法 解法一 第一次 平分280g的食盐 140g 140g 目前重物 食盐 140g 14
  • java中的数组初始化赋初值

    方法一 int vis1 声明未初始化 vis1 new int 100 定义占用空间大小 100个int for int i 1 i lt 5 i vis1 i i 进行赋值 for int i 1 i lt 100 i System o
  • Ogre粒子编辑器ParticleUniverse

    最近需要使用粒子系统制作一些特效 由于没有美术人员的帮助 制作难度可想而知 在苦闷中 找到了ParticleUniverse 这也是Torchlight采用的粒子系统 ParticleUniverse包括Particle Universe
  • 配置跳转指定_http自动跳转https的配置方法

    这篇文章主要介绍了http自动跳转https的配置方法 需要的朋友可以参考下 IIs中实现Http自动转换到Https方法介绍 403跳转对SEO有一定影响 1 下载安装URL重写模块 Microsoft URL Rewrite Modul
  • Llama-1|Alpaca-LoRA 微调模型下载以及安装推理教程

    Llama 1 Alpaca LoRA 微调模型下载以及安装推理教程 经常玩AI的人应该对LoRA这一词并不陌生 尤其是在SD绘画领域 各种角色的LoRA模型层出不穷 那么语言领域是否存在LoRA呢 存在 且繁荣 LoRA你可以理解为语言模
  • c++随机数加随机种子(用时间为随机种子)随机每次运行都不同

    srand 功能 初始化随机数发生器 用法 srand unsigned int seed 需要头文件 stdlib h 返回值 void无返回值 rand 产生的随机数在每次运行的时候都是与上一次相同的 若要不同 用函数 srand 初始
  • [软考笔记]存储管理——页式,段式,段页式

    页式存储 4kb为1页 考点 逻辑地址和物理地址之间的转换 1 先区分逻辑地址哪一部分是页号 哪一部分是页内地址 2 根据页内地址确定物理地址 后面那块 3 再根据页号查找块号 4 拼接起来就是物理地址 解题过程 1 将页面大小转化为二进制
  • 网络工程师课程---7、网络通信综合实验(做网络基础综合实验 用什么软件)...

    网络工程师课程 7 网络通信综合实验 做网络基础综合实验 用什么软件 一 总结 一句话总结 cisco packet p k t tracer tre s packet 英 p k t 美 p k t n 数据包 信息包 小包 小捆 vt
  • 【区块链】万向区块链罗荣阁:为什么区块链是解决汽车供应链金融痛点最优雅的方案?

    本文整理自万向区块链CTO罗荣阁在万向区块链实验室主办的第三届区块链全球峰会 2017 9 14 16 上的演讲速记稿 点击阅读原文可观看完整演讲视频 罗荣阁在第三届区块链全球峰会演讲 区块链是一个伟大的创新 能够解决一些传统技术难以解决的
  • 【转载】【stm32】一键下载电路

    原创Nerute 2018 11 18 01 11 10 2361 首先感谢正点原子的开源资料 下面贴上正点原子一键下载电路的原理图 很显然 核心是一块CH340芯片 什么是CH 请看手册 再来就是引脚说明 了解一键之前 我们还得知道 st
  • BERT论文阅读笔记

    文章题目 BERT Pre training of Deep Bidirectional Transformers for Language Understanding Pre training指的是在一个数据集上训练好一个模型 然后这个模
  • 字符串分割

    题目描述 给定一个非空字符串S 其被N个 分隔成N 1的子串 给定正整数K 要求除第一个子串外 其余的子串每K个字符组成新的子串 并用 分隔 对于新组成的每一个子串 如果它含有的小写字母比大写字母多 则将这个子串的所有大写字母转换为小写字母
  • 小游戏:推箱子与推箱子简化版

    在第一版的代码中 将人在目标点上以及箱子在目标点上另外输出 在后续的获取方向键并处理时 只需减去人和箱子的数字就可以刷新目标点的显示 不会出现 吃 目标点的情况 而在第二版的代码中 使用偏移值的改变来简化代码 只需通过方向键的按键活动来改变
  • STL--set容器

    目录 一 set容器基本概念 二 set构造和赋值 三 set 大小和交换 四 set 插入和删除 五 set 查找和统计 六 set 和 multiset 的区别 七 set 容器排序 八 set 容器自定义类型数据排序 一 set容器基
  • chatgpt赋能python:用Python计算数学题,速度快效果好!

    用Python计算数学题 速度快效果好 在现代化的信息时代 计算机已经成为了我们生活中不可缺少的工具之一 而对于数学爱好者来说 用计算机进行数学计算已经变得非常普遍 因为使用计算机能够快速解决数学难题 同时也将复杂的计算变得更加简单易行 P
  • 分页组件

    分页组件是web开发中常见的组件 请完成pagination函数 在id为jsPagination的DOM元素中完成分页的显示部分 需求如下 1 最多连续显示5页 居中高亮显示current页 如demo1所示 2 total为0时 隐藏整

随机推荐

  • Java无法通过形参设置为null改变实参

    文章目录 问题描述 问题例子 问题分析 问题描述 在实际业务开发过程中 我们会把实参传递给形参 在方法体内对引用对象进行构建或者修改 从而改变实参 因为对形参对象属性修改时 实参对象也会随着改变 详情请看 Java是值传递还是引用传递 区别
  • Csharp: 阴历年甲子干支算法錯誤問題

  • 探索OLED透明屏的优缺点:引领科技未来的革命性突破

    OLED透明屏作为一项革命性的创新技术 其令人惊叹的透明度和柔性性能引起了全球范围内的关注 然而 了解OLED透明屏的优缺点对于我们全面认识其在科技未来中的地位至关重要 今天 尼伽将深入探讨OLED透明屏的优势和限制 并借助相关数据 报告和
  • 什么是802.11无线局域网(WLAN)标准?

    Wireless technologies are the center of daily life Wireless networks are used to transfer data between different devices
  • 再见 Xshell ,这款开源的终端工具逼格更高

    再见 Xshell 这款开源的终端工具逼格更高 作为一名后端开发 我们经常需要和Linux系统打交道 免不了要使用Xshell这类终端工具来进行远程管理 最近发现一款更炫酷的终端工具Tabby 主题丰富 功能强大 推荐给大家 SpringB
  • Java NIO——通道Channel:网络Channel通信(重点)

    目录 IO的阻塞与非阻塞 NIO网络通信 没有使用Selector的阻塞NIO通信 非阻塞NIO通信 重点 Selector Channel 注册到 Selector 选择键 SelectionKey Selector的使用方法 IO的阻塞
  • UNeXT

    论文链接 https link springer com chapter 10 1007 978 3 031 16443 9 3 源码链接 https github com jeya maria jose UNeXt pytorch 论文摘
  • linnux系统常用命令

    shutdown h now 立刻进行关机 shutdown r now 现在重新启动计算机 reboot 现在重新启动计算机 su 切换用户 passwd 修改用户密码 logout 用户注销 tab 补全 ctrl l 清屏 类似cle
  • 49个Python的常见操作/技巧/例子

    17个Python的常见操作 技巧 很多读者都知道 Python 是一种高级编程语言 其设计的核心理念是代码的易读性 以及允许编程者通过若干行代码轻松表达想法创意 实际上 很多人选择学习 Python 的首要原因是其编程的优美性 用它编码和
  • 《pigcms v6.2最新完美至尊版无任何限制,小猪微信源码多用户微信营销服务平台系统》

    pigcms v6 2最新完美至尊版无任何限制 小猪微信源码多用户微信营销服务平台系统 前两天分享了套小猪CMS PigCms 多用户微信营销服务平台系统V6 1完美破解至尊版带微用户管理CRM 微信支付 还是不少童鞋反应出不少问题 今天再
  • unity-障碍物和空气墙的设置

    文章目录 建立空气墙 建立空气墙 建个游戏对象 然后给他添加2d碰撞盒子属性 把它放到相机下面 让它成为相机的所属的子组 跟随相机一起移动通过 创建新的标签便于碰撞确认操作 判断我们游戏操控的物体是否在空气墙上 判断是否处于空气墙上面 pr
  • 每日必看的五个产品科技类网站?

    1 Github 看看 GitHub 社区今天最热门的是什么 https github com trending 2 v2ex 会有一些新的互联网产品发布在这里 偶尔会附带免费的激活码 3 producthunt 看看今天有什么新的创业产品
  • Maven Pom设置简单项目打jar包时的入口类

    Maven Pom设置简单项目打jar包时的入口类 有时 不使用框架的简单的项目也要以jar包的形式发布和使用 如果不知道如何在pom中设置项目的入口类 就比较麻烦 在pom文件中添加如下代码 就可以设置项目的入口类了 当然 入口类中要有m
  • miniconda的安装和python环境搭建

    文章目录 前言 下载minianaconda 安装和配置 安装注意 配置 更改镜像源 创建虚拟环境和激活 conda常用指令 前言 最近想用python去写一个写ini配置文件的工具 由于电脑现在的环境是python2的 想用python3
  • AES加密出现Error: Malformed UTF-8 data报错的解决方法

    按我上一章 vue java 使用AES 前后端加密解密 址址 https blog csdn net weixin 42124196 article details 88416488 文章进行aes加密的项目 当页面获取数据时一直出现Er
  • java aio和nio的区别

    AIO 是彻底的异步通信 NIO 是同步非阻塞通信 有一个经典的举例 烧开水 假设有这么一个场景 有一排水壶 客户 在烧水 AIO的做法是 每个水壶上装一个开关 当水开了以后会提醒对应的线程去处理 NIO的做法是 叫一个线程不停的循环观察每
  • OpenMV的程序烧录

    OpenMV官方烧录教程 OpenMV脱机运行 星瞳科技 利用数据线连接OpenMV和电脑 如果OpenMV闪烁绿灯 之后是白灯 再结束 表示OpenMV连接电脑成功 打开OpenMV IDE 点击左下方的这个 或者按Ctrl E连接上Op
  • Acwing-3443. 学分绩点

    include
  • 超微主板升级bios_超微 X10DAi安装黑苹果10.13.6 OC引导

    配置 处理器 英特尔 Xeon 至强 E5 2650 v4主板 超微 X10DAI Wellsburg 内存 64 GB 三星 DDR4 2133MHz 主硬盘 Lexar 500GB SSD 500 GB 固态硬盘 主显卡 Nvidia
  • openwrt php 调用,openwrt在脚本中调用UCI接口, 非常值得学习

    bin sh Copyright C 2006 2013 OpenWrt org Copyright C 2006 Fokus Fraunhofer Copyright C 2010 Vertical Communications debu