ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。
开发环境:
复制代码 代码如下:
System:Windows JDK:1.6+ IDE:eclipse ant:1.9.1
ant 是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点: 1、跨平台性:Ant是纯Java语言编写的,所以具有很好的跨平台性。 2、操作简单:Ant是由一个内置任务和可选任务组成的,用ant任务就像是在dos中写命令行一样。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。 3、维护简单、可读性好、集成简单:由于Ant构建文件 时XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。
1、下载ant,下载1.9.1
2、解压zip压缩包,将压缩包放置你要放置的目录。我这里放置在D:\apache-ant-1.9.1,目录结构如下:
bin是ant的程序运行入口,如果没有配置ANT_HOME的情况下,可以通过bin目录中的bat程序进行运行build任务。
如:在cmd中运行ant.bat就可以执行程序,当然你选择要当前目录中存在一个build.xml(build.xml是默认的ant执行文件,当然你可以指定其他文件)
etc目录中存放的都是一些xsl的输出模板,创建一个加强的导出各种任务的XML输出,使你的build文件摆脱过时的警告
lib目录中存放的是ant程序需要依赖的jar包
manual目录是ant程序的帮助文档
3、在我的电脑 –> 右键属性 –> 高级系统配置 -> 环境变量 中配置ant
新建系统变量 ANT_HOME = D:\apache-ant-1.9.1
这样环境变量就配置好了,但前提你需要配置jdk的环境变量。如果你没有配置jdk的环境变量,那么请你先配置好jdk变量。jdk环境配置方法如下:
安装JDk到其默认目录:C:\Program Files\Java\jdk1.5.0_05 (没有jdk去官方下载一个) C:\Program Files\Java\jdk1.5.0 作用:告诉系统JVM在什么地方
右击我的电脑,选属性,高级,环境变量 ,在系统变量栏点新建,出现新建系统变量对话框,在变量名中填上JAVA_HOME ,变量值:C:\Program Files\Java\jdk1.5.0_05 ,确定后在系统变量(S)栏再新建一个环境变量CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(开头的dot和;不能少)
确定后在系统变量(S)栏查找并选中变量为Path的选项,点编辑在变量值(V)的末尾添加: %JAVA_HOME%\bin
如果没有找到PATH变量,自己新建一个! 如果你不想每次运行都要cmd到class所在目录然后执行java命令,可以把所有的class文件放到统一的目录组织下,然后将此目录也追加到CLASSPATH下。
测试代码如下:
复制代码 代码如下:
public class Test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
用记事本编辑后存为Test.java(文件名与类名相同)文件,打开命令行窗口, cd到文件所在目录下:
复制代码 代码如下:
javac Test.java //编译命令 java Test //执行程序
如果输出为:Hello World! OK,配置完毕,否则,重新检查。
在启动,运行cmd的dos窗口中输入ant,如图:
如果出现这个,那么恭喜你安装成功了!否则就失败了,检查下前面的步骤有没有错误。上面命令会执行ant程序,ant默认执行build.xml中的任务,这里在Administrator目录中没有这个文件。
如果安装失败,你看看是否存在一些情况:
1、没有配置JAVA_HOME 或配置错误,并且JAVA_HOME\bin\java.exe存在
2、没有配置ANT_HOEM 或配置错误,并且ANT_HOME\bin\ant.bat存在
3、检查你的环境变量的path变量中,有木有配置…;%ANT_HOME%\bin;…
%PATH%=…maybe-other-entries…;%ANT_HOME%\bin;…maybe-other-entries…
ant在运行命令的时候,有时候会出现一些公园的jar库。这些库会存在于每个ant工程中,那么这个时候我们可以把这个jar包放到ant_home\lib目录中作为全局的库使用。
如果你不想“污染”原始的ant程序,那么你可以把jar包放在当前windows用户的目录下,具体位置应该是${user.home}/.ant/lib 下。没有以上目录可以手动建立。
如果你只是临时要添加lib,又不想把lib添加到当前ant工程中。你可以在运行ant程序的时候指定依赖的lib参数。
同时,你还可以在当前build工程的classpath目录中添加你的工程依赖jar包。
语法元素说明如下:
< project default="all">
<property name="pro_a" value="a value" />
<property name="pro_b" value="b value" />
<path id="rt.path">
<pathelement location="${java.home}/jre/lib/rt.jar" />
</path>
<target name="all">
<javac srcdir="."><classpath refid="a.path" /></javac>
</target>
< /project>
注意:
● 所有构建文件都要有元素,而且至少有一个 元素。
● 对于 元素的default 属性并不一定需要默认值。
● 构建文件并不一定要被命名为build.xml。不过build.xml 是ant 要搜索的默认文件名。
● 每个构建文件只能有一个 元素。
在cmd窗口中进入到当前build.xml目录
复制代码 代码如下:
ant
在当前目录下的build.xml运行Ant,执行缺省的target。
复制代码 代码如下:
ant -buildfile build-test.xml
在当前目录下的build-test.xml运行Ant,执行缺省的target。
复制代码 代码如下:
ant -buildfile build-test.xml clean
在当前目录下的build-test.xml运行Ant,执行一个叫做clean的target。
复制代码 代码如下:
ant -buildfile build-test.xml -Dbuild=build/classes clean
在当前目录下的build-test.xml运行Ant,执行一个叫做clean的target,并设定build属性的值为build/classes。
project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。
● name 属性:用于指定 project 元素的名称。
● default 属性:用于指定 project 默认执行时所执行的 target 的名称。
● basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。
< ?xml version="1.0" ?>
< project name="ant-project" default="print-dir" basedir=".">
<target name="print-dir">
<echo message="The base dir is: ${basedir}" />
</target>
< /project>
从上例可以看出,在这里定义了default 属性的值为print-dir,即当运行ant 命令时,如果没有指明执行的target,则将执行默认的target(print-dir)。此外,还定义了basedir 属性的值为 “.” ,.表示当前目录,进入当前目录后运行ant 命令,得一下结果:
target为ant的基本执行单元或是任务,它可以包含一个或多个具体的单元/任务。多个target 可以存在相互依赖关系。它有如下属性:
● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。
● depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的target 会先执行。
● if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行。
● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。
● description 属性:该属性是关于 target 功能的简短描述和说明。 示例:
< ?xml version="1.0" ?>
< project name="ant-target" default="print">
<target name="version" if="ant.java.version">
<echo message="Java Version: ${ant.java.version}" />
</target>
<target name="print" depends="version" unless="docs">
<description>a depend example!</description>
<echo message="The base dir is: ${basedir}" />
</target>
< /project>
从以下结果后可以看到,我们运行的是名为 print的target ,由于它依赖于version这个target任务,所以 version将首先被执行,同时因为系统配置了JDK,所以 ant.java.version 属性存在,执行了version,输出信息:"[echo] Java Version: 1.6 “,version执行完毕后,接着执行 print,因为docs不存在,而unless属性是在不存在时进入所在target 的,由此可知 print得以执行,输出信息:”[echo] The base dir is:D:\Workspace\AntExample\build"。
property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引: property 元素可用作 task 的属性值。在 task 中是通过将属性名放在${属性名}之间,并放在 task 属性值的位置来实现的。 Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getProperties() 方法得到的属性一致,这些系统属性可参考 sun 网站的说明。同时, Ant 还提供了一些它自己的内置属性,如下: basedir: project 基目录的绝对路径; ant.file: buildfile的绝对路径,上例中ant.file值为D:\Workspace\AntExample\build; ant.version: Ant 的版本信息,本文为1.8.1 ; ant.project.name: 当前指定的project的名字,即前文说到的project的name属性值; ant.java.version: Ant 检测到的JDK版本,本文为 1.6 。
举例说明如下:
< project name="ant-project" default="example">
<property name="name" value="jojo" />
<property name="age" value="25" />
<target name="example">
<echo message="name: ${name}, age: ${age}" />
</target>
< /project>
上例中用户设置了名为name 和age的两个属性,这两个属性设置后,在下文中可以通过 ${name} 和 ${age} 分别取得这两个属性值。
copy主要用来对文件和目录的复制功能。举例如下:
● 复制单个文件:
复制代码 代码如下:
< copy file="old.txt" tofile="new.txt"/>
● 对文件目录进行复制:
复制代码 代码如下:
< copy todir="../dest_dir"> <fileset dir="src_dir"/> < /copy>
● 将文件复制到另外的目录:
复制代码 代码如下:
< copy file="src.txt" todir="c:/base"/>
对文件或目录进行删除,举例如下:
● 删除某个文件:
复制代码 代码如下:
< delete file="/res/image/cat.jpg"/>
● 删除某个目录:
复制代码 代码如下:
< delete dir="/res/image"/>
● 删除所有的jar文件或空目录:
复制代码 代码如下:
< delete includeEmptyDirs="true"> <fileset dir="." includes="**/*.jar"/> < /delete>
创建目录。
复制代码 代码如下:
< mkdir dir="/home/philander/build/classes"/>
移动文件或目录,举例如下:
● 移动单个文件:
复制代码 代码如下:
< move file="sourcefile" tofile=”destfile”/>
● 移动单个文件到另一个目录:
复制代码 代码如下:
< move file="sourcefile" todir=”movedir”/>
● 移动某个目录到另一个目录:
复制代码 代码如下:
< move todir="newdir"> <fileset dir="olddir"/> < /move>
该任务的作用是根据日志或监控器的级别输出信息。它包括 message 、 file 、 append 和 level 四个属性,举例如下
<echo message="ant message" file="/logs/ant.log" append="true">
该标签用来生成一个JAR文件,其属性如下。
● destfile表示JAR文件名。
● basedir表示被归档的文件名。
● includes表示别归档的文件模式。
● exchudes表示被排除的文件模式。
● compress表示是否压缩。
示例:
< jar destfile="${webRoot}/${ash_jar}" level="9" compress="true" encoding="utf-8" basedir="${dest}">
<manifest>
<attribute name="Implementation-Version" value="Version: 2.2"/>
</manifest>
< /jar>
上面的mainfest是jar包中的MEAT-INF中的MANIFEST.MF中的文件内容
同样打包操作的的还有war、tgz,已经解压操作uzip
复制代码 代码如下:
< !-- 创建zip -->
< zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
< !-- 创建tgz -->
< gzip src="classes\**\*.class" zipfile="output.class.gz"/>
< !-- 解压zip -->
< unzip src="output.class.gz" dest="extractDir"/>
< !-- 建立war包 -->
< war destfile="${webRoot}/ash.war" basedir="${basedir}/web" webxml="${basedir}/web/WEB-INF/web.xml">
<exclude name="WEB-INF/classes/**"/>
<exclude name="WEB-INF/lib/**"/>
<exclude name="WEB-INF/work/_jsp/**"/>
<lib dir="${lib.dir}" includes="**/*.jar, **/*.so, **/*.dll">
<exclude name="${webRoot}\${helloworld_jar}"/>
</lib>
<lib file="${webRoot}/${helloworld_jar}"/>
<classes dir="${dest}" includes="**/*.xml, **/*.properites, **/*.xsd"> </classes>
< /war>
该标签用于编译一个或一组java文件,其属性如下。
● srcdir表示源程序的目录。
● destdir表示class文件的输出目录。
● include表示被编译的文件的模式。
● excludes表示被排除的文件的模式。
● classpath表示所使用的类路径。
● debug表示包含的调试信息。
● optimize表示是否使用优化。
● verbose 表示提供详细的输出信息。
● fileonerror表示当碰到错误就自动停止。
示例
< javac srcdir="${src}" destdir="${dest}"/>
< !-- 设置jvm内存
<javac srcdir="src" fork="true"/>
< javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac" memoryMaximumSize="128m"/>
该标签用来执行编译生成的.class文件,其属性如下。
● classname 表示将执行的类名。
● jar表示包含该类的JAR文件名。
● classpath所表示用到的类路径。
● fork表示在一个新的虚拟机中运行该类。
● failonerror表示当出现错误时自动停止。
● output 表示输出文件。
● append表示追加或者覆盖默认文件。
示例
< java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
由Ant构建文件调用的程序,可以通过元素向其传递命令行参数,如apply,exec和java任务均可接受嵌套元素,可以为各自的过程调用指定参数。以下是的所有属性。
● values 是一个命令参数。如果参数中有空格,但又想将它作为单独一个值,则使用此属性。
● file 表示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目录。
● line 表示用空格分隔的多个参数列表。
● 表示路径,一个作为单个命令行变量的path-like的字符串;或作为分隔符,Ant会将其转变为特定平台的分隔符。
● pathref 引用的path(使用path元素节点定义path)的id
● prefix 前缀
● suffix 后缀
例子
复制代码 代码如下:
< arg value="-l -a"/>
是一个含有空格的单个的命令行变量。
复制代码 代码如下:
< arg line="-l -a"/>
是两个空格分隔的命令行变量。
复制代码 代码如下:
< arg path="/dir;/dir2:\dir3"/>
是一个命令行变量,其值在DOS系统上为\dir;\dir2;\dir3;在Unix系统上为/dir:/dir2:/dir3 。
由Ant构建文件调用的外部命令或程序,元素制定了哪些环境变量要传递给正在执行的系统命令,元素可以接受以下属性。
● file表示环境变量值的文件名。此文件名要被转换位一个绝对路径。
● path表示环境变量的路径。Ant会将它转换为一个本地约定。
● value 表示环境变量的一个直接变量。
● key 表示环境变量名。 注意 file path 或 value只能取一个。
filelist 是一个支持命名的文件列表的数据类型,包含在一个filelist类型中的文件不一定是存在的文件。以下是其所有的属性。
● dir是用于计算绝对文件名的目录。
● files 是用逗号分隔的文件名列表。
● refid 是对某处定义的一个的引用。 注意 dir 和 files 都是必要的,除非指定了refid(这种情况下,dir和files都不允许使用)。
示例
< filelist id="docfiles" dir="${doc.src}" files="foo.xml,bar.xml"/>
文件集合 ${doc.src}/foo.xml和${doc.src}/bar.xml. 这些文件也许还是不存在的文件.
< filelist id="docfiles" dir="${doc.src}" files="foo.xml bar.xml"/>
< filelist refid="docfiles"/>
< filelist id="docfiles" dir="${doc.src}">
<file name="foo.xml"/>
<file name="bar.xml"/>
< /filelist>
fileset 数据类型定义了一组文件,并通常表示为元素。不过,许多ant任务构建成了隐式的fileset,这说明他们支持所有的fileset属性和嵌套元素。以下为fileset 的属性列表。
● dir表示fileset 的基目录。
● casesensitive的值如果为false,那么匹配文件名时,fileset不是区分大小写的,其默认值为true.
● defaultexcludes 用来确定是否使用默认的排除模式,默认为true。
● excludes 是用逗号分隔的需要派出的文件模式列表。
● excludesfile 表示每行包含一个排除模式的文件的文件名。
● includes 是用逗号分隔的,需要包含的文件模式列表。
● includesfile 表示每行包括一个包含模式的文件名。
示例
< fileset id="lib.runtime" dir="${lib.path}/runtime">
<include name="**/*.jar"/>
<include name="**/*.so"/>
<include name="**/*.dll"/>
< /fileset>
< fileset id="lib.container" dir="${lib.path}/container">
<include name="**/*.jar"/>
< /fileset>
< fileset id="lib.extras" dir="${lib.path}">
<include name="test/**/*.jar"/>
< /fileset>
fileset 是对文件的分组,而patternset是对模式的分组,他们是紧密相关的概念。
支持4个属性:includes、excludex、includexfile、excludesfile,这些与fileset相同。
patternset 还允许以下嵌套元素:include,exclude,includefile 和 excludesfile.
示例
< !-- 黑白名单 -->
< patternset id="non.test.sources">
<include name="**/*.java"/>
<!-- 文件名包含Test的排除 -->
<exclude name="**/*Test*"/>
< /patternset>
< patternset id="sources">
<include name="std/**/*.java"/>
<!-- 判断条件 存在professional就引入 -->
<include name="prof/**/*.java" if="professional"/>
<exclude name="**/*Test*"/>
< /patternset>
< !-- 一组文件 -->
< patternset includesfile="some-file"/>
< patternset>
<includesfile name="some-file"/>
< patternset/>
< patternset>
<includesfile name="some-file"/>
<includesfile name="${some-other-file}" if="some-other-file"/>
< patternset/>
filterset定义了一组过滤器,这些过滤器将在文件移动或复制时完成文件的文本替换。 主要属性如下: ● begintoken 表示嵌套过滤器所搜索的记号,这是标识其开始的字符串。 ● endtoken 表示嵌套过滤器所搜索的记号这是标识其结束的字符串。 ● id 是过滤器的唯一标志符。 ● refid 是对构建文件中某处定义一个过滤器的引用。
示例
< !-- 将目标文件build.dir目录中的version.txt文件内容中的@DATE@替换成TODAY当前日期的值,并把替换后的文件存放在dist.dir目录中 -->
< copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
<filterset>
<filter token="DATE" value="${TODAY}"/>
</filterset>
< /copy>
< !-- 自定义变量的格式 -->
< copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
<!-- 从version.txt中的%位置开始搜索,到*位置结束,进行替换内容中的@DATE@替换成TODAY当前日期的值-->
<filterset begintoken="%" endtoken="*">
<filter token="DATE" value="${TODAY}"/>
</filterset>
< /copy>
< !-- 使用外部的过滤定义文件 -->
< copy toDir="${dist.dir}/docs">
<fileset dir="${build.dir}/docs">
<include name="**/*.html">
</fileset>
<filterset begintoken="%" endtoken="*">
<!-- 过来文件从外部引入,过来的属性和值配置在dist.properties文件中 -->
<filtersfile file="${user.dir}/dist.properties"/>
</filterset>
< /copy>
< !-- 使用引用方式,重复利用过滤集 -->
< filterset id="myFilterSet" begintoken="%" endtoken="*">
<filter token="DATE" value="${TODAY}"/>
< /filterset>
< copy file="${build.dir}/version.txt" toFile="${dist.dir}/version.txt">
<filterset refid="myFilterSet"/>
< /copy>
path元素用来表示一个类路径,不过它还可以用于表示其他的路径。在用作几个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符,其拥有的属性如下。
● location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。
● refid 是对当前构建文件中某处定义的一个path的引用。
● path表示一个文件或路径名列表。
示例
< path id="buildpath">
<fileset refid="lib.runtime"/>
<fileset refid="lib.container"/>
<fileset refid="lib.extras"/>
< /path>
< path id="src.paths">
<fileset id="srcs" dir=".">
<include name="src/**/*.java"/>
</fileset>
< /path>
< ?xml version="1.0" encoding="UTF-8"?>
< !-- name是当前工程的名称,default是默认执行的任务,basedir是工作目录(.代表当前根目录) -->
< project name="HelloWorld" default="run" basedir=".">
<!-- property类似于程序中定义简单的变量 -->
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="helloWorld.jar"/>
<!-- target是一个事件、事情、任务, name是当前事情的名称,depends是依赖的上一件或是多件事情 如果所依赖的事情没有执行,ant会先运行依赖事情,然后再运行当前事情 -->
<!-- 初始化 -->
<target name="init">
<!-- 建立classes目录 -->
<mkdir dir="${dest}"/>
<mkdir dir="temp"/>
<mkdir dir="temp2"/>
</target>
<!-- 编译 -->
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
<!-- 设置jvm内存 -->
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac" memoryMaximumSize="128m"/>
</target>
<!-- 建立jar包 -->
<target name="build" depends="compile">
<!-- <jar jarfile="${hello_jar}" basedir="${dest}"/>
创建一个名称是package.jar文件
<jar destfile="package.jar" basedir="classes"/>
-->
<jar destfile="${hello_jar}" basedir="classes">
<!-- 向jar包中的main文件中添加内容 -->
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<!-- 复制jar文件 todir="复制到目录"-->
<copy file="${hello_jar}" tofile="${dest}\temp.jar"/>
<copy todir="temp">
<!-- 不按照默认方式 defaultexcludes="" -->
<fileset dir="src">
<include name="**/*.java"/>
</fileset>
</copy>
<copy todir="temp2">
<fileset dir="src">
<and>
<contains text="main"/>
<size value="1" when="more"/>
</and>
</fileset>
</copy>
<!-- 移动jar文件 -->
<move file="${dest}\temp.jar" tofile="temp\move-temp.jar"/>
<!-- 创建zip -->
<zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\**\*.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!--替换input.txt内容中的old为new -->
<replace file="input.txt" token="old" value="new"/>
</target>
<!-- 运行 -->
<target name="run" depends="build">
<java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
</target>
<!-- 清除 -->
<target name="clean">
<!-- 删除生成的文件 -->
<delete dir="${dest}"/>
<delete file="${hello_jar}"/>
</target>
<tstamp>
<format property="OFFSET_TIME" pattern="HH:mm:ss" offset="10" unit="minute"/>
</tstamp>
<!-- 重新运行 -->
<target name="rerun" depends="clean,run">
<echo message="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>
<aunt target="clean"/>
<aunt target="run"/>
</target>
< /project>
要说的的东西基本上就那么多,ant还有很多内容没有提到,有兴趣的可以自己去研究研究。ant不难,你用它就像是在docs控制台输入命令行一样,只不过ant是将命令行转换为xml的脚本信息,可以进行重复的运行。在一定情况下,提高了效率和重复的工作。
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf