XPU-17通信生产实习-智能音箱项目-DAY2

HTTP协议简介

http

HTTP (Hypertext Transfer Protocol,超文本传输协议)是-种能够获取如HTML这样的网络资源的通讯协议。它是在Web.上进行数据交换的基础,是一-种客户端-服务器 (C/S) 协议,由像浏览器这样的客户端发出的消息叫做请求(requests) ,被服务端响应的消息叫做响应(responses)。 -个完整的Web文档通常是由不同的子文档拼接而成的,像是文本.布局描述、图片、视频、脚本等等。

统一资源标识符URI

统一资源标识符(网址)描述了一 台特定服务器上某资源的特定位置. RFC 3986

[[协议名://用户名]]:密码@服务器地址:服务器端口号/路径?查询字符串#片段ID

客户端请求消息

客户端发送一个HTTP请求到服务 器的请求消息包括以下格式:请求行(request line) .请求头部(header) .空行和请求数据四个部分组成。

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b6kcWYe0-1593707571350)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200701180717723.png)]

请求方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(method) 。每条HTTP请求报文都包含一
个方法,这个方法会告诉服务器要执行什么操作。
方法 描述
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件) .数据被包含在请求体中。
POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。

响应头信息

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。

应答头 说明
Allow 服务器支持哪些请求方法(如GET. POST等) .
Content-Encoding 文档的编码(Encode) 方法。只有在解码之后才可以得到Content Type头指定的内容类型。

Content-Length 表示内容长度。
Content-Type 表示后面的文档属于什么MIME类型。
Date 当前的GMT时间。

状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
常见的HTTP状态码:
200-请求成功
301 -资源(网页等)被永久转移到其它URL
404-请求的资源(网页等)不存在
500 -内部服务器错误

分类
分类描述
1信息,服务器收到请求,需要请求者继续执行操作
2成功,操作被成功接收并处理
3重定向,需要进一步的操作以完成请求
4客户端错误,请求包含语法错误或无法完成请求
5服务器错误,服务器在处理请求的过程中发生了错误

内容类型

Content-Type,内容类型,一般是指网页中存在的Content-Type, 用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。
文件扩展名 Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type)
.* (二进制流,不知道下载文件类型) applicationloctet-stream .tif image/iff
.001 application/-001 .301 application/x-301
.323 text/h323 .906 application/x-906
.907 drawing/907 .a11 application/x-a11
.acp audio/x-mei-aac .ai application/postscript
.aif audilaiff .aifc audio/aiff

.aiff audilaiff .anv application/x-anv

RESTful API

表现层状态转换(Representational State Transfer,缩写: REST) 是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一种互联网软件架构风格。用开发网站的方式实现远程接口调用,网站即软件。REST通常基 于使用HTTP, URI, 和XML以及HTML这些现有的广泛流行的协议和标准。
特点:
●资源是由URI来指定。
●对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
●通过操作资源的表现形式来操作资源。
●资源的表现形式则是XML或者JSON,客户端软件可以是浏览器或者手机APP,甚至是其他服务。

REST API例子

一个简单的网络商店应用,列举所有商品:
GET http://www.store.com/products
呈现某-件商品:
GET http://www.store.com/products/12345
下单购买:
POST htt://www.store.com/orders


REST API的优点

可更高效利用缓存来提高响应速度
通讯本身的无状态性可以让不同的服务器的处理一 系列请求中的不同请求,展性
浏览器即可作为客户端,简化软件需求
相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
不需要额外的资源发现机制
在软件技术演进中的长期的兼容性更好

什么是JSON

JSON指的是JavaScript对象表示法(JavaScript object Notation)。
JSON是轻量级的文本数据交换格式。
JSON独立于语言: JSON使用Javascript语法来描述数据对象, 但是JSON仍然独立于语言器和JSON库支持许多不同的编程语言。
JSON具有自我描述性,更易理解。
https://ww.json.org/ison-zh.html

JSON语法

JSON语法是JavaScript对象表示语法的子集。
数据在名称/值对中
数据由逗号分隔
大括号保存对象
中括号保存数组
名称/值对包括字段名称(在双引号中),后面写一个冒号, 然后是值。
JSON值可以是:
数字(整数浮点数科学计数法)
字符串(在双引号中)
逻辑值(true 或false)
数组(在中括号中)
对象(在大括号中)
null

调用web服务器接口

安装C语言编译环境

sudo apt install build-essential man-db

编译

cc main.c -o hello

运行编译后的可执行文件

./hello

编译libcurl程序

cc main.c -o hello -lcurl
#include <stdio.h>
int main(void)
{
printf("Hello world\n");
return 0;
}

其他同学的教程

作业提交教程

以个人代码库smart_spearker为例

1.Fork班级的代码库到自己的主页;
2.执行git clone <副本代码库的地址>将副本代码库克隆到本地;
3.执行ls查看克隆到本地的工作目录;
4.执行cd smart_speaker将路径切换到smart_speaker目录下;
5.执行git init将Git仓库初始化;
6.执行mkdir 41703020202在工作目录下创建以自己学号命名的文件夹;
7.将完成的作业放进学号文件夹内;
8.执行git add 41703020202/将学号文件夹以及其中的文件上传到暂存区;
9.执行git status查看当前工作区状态;
10.执行git commit -m "提交日志"将文件提交到代码库;
11.执行git push将本地代码库中的文件提交到远程代码库;
12.登录远程代码库,用户名为个人空间地址;

编译libcurl程序

1.可执行sudo apt install build-essential man-db安装C语言编译环境;
2.可执行cc <文件名>编译代码;
3.可执行./a.out运行并输出代码结果;
4.可执行cat main.c查看代码的具体内容;
5.可执行cc <文件名> -o <输出文件名> -lcurl编译代码并指定输出文件的名字,链接curl库,不指定则默认为a.out;

疫情信息获取

1.可执行sudo apt install libcurl4-openssl-dev安装libcurl4-openssl-dev;
2.可执行sudo apt install curl安装crul;
3.可执行curl -X -GET "https://coronavirus-tracker-api.herokuapp.com/v2/latest"获取网址报文;
4.可执行git clone https://github.com/DaveGamble/cJSON.git克隆JSON库到目录cJSON;
5.可执行git checkout v1.7.13 .恢复1.7.13版本的库;
6.可执行cp cJSON.c cJSON.h …/smart_speaker将两文件复制到上一级目录的指定目录中;

20200701课程实现所需目录的安装

sudo apt install build-essential
sudo apt install man-db
sudo apt install curl
sudo apt install libcurl4-openssl-dev

##虚拟机操作界面
login as: yiyi
yiyi@192.168.51.8's password:
Linux debian 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 30 13:53:27 2020 from 192.168.51.7

yiyi@debian:~$ sudo apt install build-essential man-db
[sudo] yiyi 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
man-db 已经是最新版 (2.8.5-2)。
将会同时安装下列软件:
  binutils binutils-common binutils-x86-64-linux-gnu cpp cpp-8 dirmngr
  dpkg-dev fakeroot g++ g++-8 gcc gcc-8 gnupg gnupg-l10n gnupg-utils gpg
  gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libassuan0
  libatomic1 libbinutils libc-dev-bin libc6-dev libcc1-0 libdpkg-perl
  libfakeroot libfile-fcntllock-perl libgcc-8-dev libgomp1 libisl19 libitm1
  libksba8 liblsan0 libmpc3 libmpfr6 libmpx2 libnpth0 libquadmath0
  libstdc++-8-dev libtsan0 libubsan1 linux-libc-dev make manpages manpages-dev
  pinentry-curses
建议安装:
  binutils-doc cpp-doc gcc-8-locales dbus-user-session pinentry-gnome3 tor
  debian-keyring g++-multilib g++-8-multilib gcc-8-doc libstdc++6-8-dbg
  gcc-multilib autoconf automake libtool flex bison gdb gcc-doc gcc-8-multilib
  libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan5-dbg
  liblsan0-dbg libtsan0-dbg libubsan1-dbg libmpx2-dbg libquadmath0-dbg
  parcimonie xloadimage scdaemon glibc-doc bzr libstdc++-8-doc make-doc
  pinentry-doc
下列【新】软件包将被安装:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential cpp cpp-8
  dirmngr dpkg-dev fakeroot g++ g++-8 gcc gcc-8 gnupg gnupg-l10n gnupg-utils
  gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm
  libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
  libasan5 libassuan0 libatomic1 libbinutils libc-dev-bin libc6-dev libcc1-0
  libdpkg-perl libfakeroot libfile-fcntllock-perl libgcc-8-dev libgomp1
  libisl19 libitm1 libksba8 liblsan0 libmpc3 libmpfr6 libmpx2 libnpth0
  libquadmath0 libstdc++-8-dev libtsan0 libubsan1 linux-libc-dev make manpages
  manpages-dev pinentry-curses
升级了 0 个软件包,新安装了 54 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 57.7 MB 的归档。
解压缩后会消耗 202 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://security.debian.org/debian-security buster/updates/main amd64 linux-libc-dev amd64 4.19.118-2+deb10u1 [1,354 kB]
获取:2 http://mirrors.ustc.edu.cn/debian buster/main amd64 manpages all 4.16-2 [1,295 kB]
获取:3 http://mirrors.ustc.edu.cn/debian buster/main amd64 binutils-common amd64 2.31.1-16 [2,073 kB]
获取:4 http://mirrors.ustc.edu.cn/debian buster/main amd64 libbinutils amd64 2.31.1-16 [478 kB]
获取:5 http://mirrors.ustc.edu.cn/debian buster/main amd64 binutils-x86-64-linux-gnu amd64 2.31.1-16 [1,823 kB]
获取:6 http://mirrors.ustc.edu.cn/debian buster/main amd64 binutils amd64 2.31.1-16 [56.8 kB]
获取:7 http://mirrors.ustc.edu.cn/debian buster/main amd64 libc-dev-bin amd64 2.28-10 [275 kB]
获取:8 http://mirrors.ustc.edu.cn/debian buster/main amd64 libc6-dev amd64 2.28-10 [2,691 kB]
获取:9 http://mirrors.ustc.edu.cn/debian buster/main amd64 libisl19 amd64 0.20-2 [587 kB]
获取:10 http://mirrors.ustc.edu.cn/debian buster/main amd64 libmpfr6 amd64 4.0.2-1 [775 kB]
获取:11 http://mirrors.ustc.edu.cn/debian buster/main amd64 libmpc3 amd64 1.1.0-1 [41.3 kB]
获取:12 http://mirrors.ustc.edu.cn/debian buster/main amd64 cpp-8 amd64 8.3.0-6 [8,914 kB]
获取:13 http://mirrors.ustc.edu.cn/debian buster/main amd64 cpp amd64 4:8.3.0-1 [19.4 kB]
获取:14 http://mirrors.ustc.edu.cn/debian buster/main amd64 libcc1-0 amd64 8.3.0-6 [46.6 kB]
获取:15 http://mirrors.ustc.edu.cn/debian buster/main amd64 libgomp1 amd64 8.3.0-6 [75.8 kB]
获取:16 http://mirrors.ustc.edu.cn/debian buster/main amd64 libitm1 amd64 8.3.0-6 [27.7 kB]
获取:17 http://mirrors.ustc.edu.cn/debian buster/main amd64 libatomic1 amd64 8.3.0-6 [9,032 B]
获取:18 http://mirrors.ustc.edu.cn/debian buster/main amd64 libasan5 amd64 8.3.0-6 [362 kB]
获取:19 http://mirrors.ustc.edu.cn/debian buster/main amd64 liblsan0 amd64 8.3.0-6 [131 kB]
获取:20 http://mirrors.ustc.edu.cn/debian buster/main amd64 libtsan0 amd64 8.3.0-6 [283 kB]
获取:21 http://mirrors.ustc.edu.cn/debian buster/main amd64 libubsan1 amd64 8.3.0-6 [120 kB]
获取:22 http://mirrors.ustc.edu.cn/debian buster/main amd64 libmpx2 amd64 8.3.0-6 [11.4 kB]
获取:23 http://mirrors.ustc.edu.cn/debian buster/main amd64 libquadmath0 amd64 8.3.0-6 [133 kB]
获取:24 http://mirrors.ustc.edu.cn/debian buster/main amd64 libgcc-8-dev amd64 8.3.0-6 [2,298 kB]
获取:25 http://mirrors.ustc.edu.cn/debian buster/main amd64 gcc-8 amd64 8.3.0-6 [9,452 kB]
获取:26 http://mirrors.ustc.edu.cn/debian buster/main amd64 gcc amd64 4:8.3.0-1 [5,196 B]
获取:27 http://mirrors.ustc.edu.cn/debian buster/main amd64 libstdc++-8-dev amd64 8.3.0-6 [1,532 kB]
获取:28 http://mirrors.ustc.edu.cn/debian buster/main amd64 g++-8 amd64 8.3.0-6 [9,752 kB]
获取:29 http://mirrors.ustc.edu.cn/debian buster/main amd64 g++ amd64 4:8.3.0-1 [1,644 B]
获取:30 http://mirrors.ustc.edu.cn/debian buster/main amd64 make amd64 4.2.1-1.2 [341 kB]
获取:31 http://mirrors.ustc.edu.cn/debian buster/main amd64 libdpkg-perl all 1.19.7 [1,414 kB]
获取:32 http://mirrors.ustc.edu.cn/debian buster/main amd64 dpkg-dev all 1.19.7 [1,773 kB]
获取:33 http://mirrors.ustc.edu.cn/debian buster/main amd64 build-essential amd64 12.6 [7,576 B]
获取:34 http://mirrors.ustc.edu.cn/debian buster/main amd64 libassuan0 amd64 2.5.2-1 [49.4 kB]
获取:35 http://mirrors.ustc.edu.cn/debian buster/main amd64 gpgconf amd64 2.2.12-1+deb10u1 [510 kB]
获取:36 http://mirrors.ustc.edu.cn/debian buster/main amd64 libksba8 amd64 1.3.5-2 [99.7 kB]
获取:37 http://mirrors.ustc.edu.cn/debian buster/main amd64 libnpth0 amd64 1.6-1 [18.4 kB]
获取:38 http://mirrors.ustc.edu.cn/debian buster/main amd64 dirmngr amd64 2.2.12-1+deb10u1 [712 kB]
获取:39 http://mirrors.ustc.edu.cn/debian buster/main amd64 libfakeroot amd64 1.23-1 [45.9 kB]
获取:40 http://mirrors.ustc.edu.cn/debian buster/main amd64 fakeroot amd64 1.23-1 [85.8 kB]
获取:41 http://mirrors.ustc.edu.cn/debian buster/main amd64 gnupg-l10n all 2.2.12-1+deb10u1 [1,010 kB]
获取:42 http://mirrors.ustc.edu.cn/debian buster/main amd64 gnupg-utils amd64 2.2.12-1+deb10u1 [861 kB]
获取:43 http://mirrors.ustc.edu.cn/debian buster/main amd64 gpg amd64 2.2.12-1+deb10u1 [865 kB]
获取:44 http://mirrors.ustc.edu.cn/debian buster/main amd64 pinentry-curses amd64 1.1.0-2 [64.5 kB]
获取:45 http://mirrors.ustc.edu.cn/debian buster/main amd64 gpg-agent amd64 2.2.12-1+deb10u1 [617 kB]
获取:46 http://mirrors.ustc.edu.cn/debian buster/main amd64 gpg-wks-client amd64 2.2.12-1+deb10u1 [485 kB]
获取:47 http://mirrors.ustc.edu.cn/debian buster/main amd64 gpg-wks-server amd64 2.2.12-1+deb10u1 [478 kB]
获取:48 http://mirrors.ustc.edu.cn/debian buster/main amd64 gpgsm amd64 2.2.12-1+deb10u1 [604 kB]
获取:49 http://mirrors.ustc.edu.cn/debian buster/main amd64 gnupg all 2.2.12-1+deb10u1 [715 kB]
获取:50 http://mirrors.ustc.edu.cn/debian buster/main amd64 libalgorithm-diff-perl all 1.19.03-2 [47.9 kB]
获取:51 http://mirrors.ustc.edu.cn/debian buster/main amd64 libalgorithm-diff-xs-perl amd64 0.04-5+b1 [11.8 kB]
获取:52 http://mirrors.ustc.edu.cn/debian buster/main amd64 libalgorithm-merge-perl all 0.08-3 [12.7 kB]
获取:53 http://mirrors.ustc.edu.cn/debian buster/main amd64 libfile-fcntllock-perl amd64 0.22-3+b5 [35.4 kB]
获取:54 http://mirrors.ustc.edu.cn/debian buster/main amd64 manpages-dev all 4.16-2 [2,232 kB]
已下载 57.7 MB,耗时 2分 37秒 (368 kB/s)
正在从软件包中解出模板:100%
正在选中未选择的软件包 manpages。
(正在读取数据库 ... 系统当前共安装有 28313 个文件和目录。)
准备解压 .../00-manpages_4.16-2_all.deb  ...
正在解压 manpages (4.16-2) ...
正在选中未选择的软件包 binutils-common:amd64。
准备解压 .../01-binutils-common_2.31.1-16_amd64.deb  ...
正在解压 binutils-common:amd64 (2.31.1-16) ...
正在选中未选择的软件包 libbinutils:amd64。
准备解压 .../02-libbinutils_2.31.1-16_amd64.deb  ...
正在解压 libbinutils:amd64 (2.31.1-16) ...
正在选中未选择的软件包 binutils-x86-64-linux-gnu。
准备解压 .../03-binutils-x86-64-linux-gnu_2.31.1-16_amd64.deb  ...
正在解压 binutils-x86-64-linux-gnu (2.31.1-16) ...
正在选中未选择的软件包 binutils。
准备解压 .../04-binutils_2.31.1-16_amd64.deb  ...
正在解压 binutils (2.31.1-16) ...
正在选中未选择的软件包 libc-dev-bin。
准备解压 .../05-libc-dev-bin_2.28-10_amd64.deb  ...
正在解压 libc-dev-bin (2.28-10) ...
正在选中未选择的软件包 linux-libc-dev:amd64。
准备解压 .../06-linux-libc-dev_4.19.118-2+deb10u1_amd64.deb  ...
正在解压 linux-libc-dev:amd64 (4.19.118-2+deb10u1) ...
正在选中未选择的软件包 libc6-dev:amd64。
准备解压 .../07-libc6-dev_2.28-10_amd64.deb  ...
正在解压 libc6-dev:amd64 (2.28-10) ...
正在选中未选择的软件包 libisl19:amd64。
准备解压 .../08-libisl19_0.20-2_amd64.deb  ...
正在解压 libisl19:amd64 (0.20-2) ...
正在选中未选择的软件包 libmpfr6:amd64。
准备解压 .../09-libmpfr6_4.0.2-1_amd64.deb  ...
正在解压 libmpfr6:amd64 (4.0.2-1) ...
正在选中未选择的软件包 libmpc3:amd64。
准备解压 .../10-libmpc3_1.1.0-1_amd64.deb  ...
正在解压 libmpc3:amd64 (1.1.0-1) ...
正在选中未选择的软件包 cpp-8。
准备解压 .../11-cpp-8_8.3.0-6_amd64.deb  ...
正在解压 cpp-8 (8.3.0-6) ...
正在选中未选择的软件包 cpp。
准备解压 .../12-cpp_4%3a8.3.0-1_amd64.deb  ...
正在解压 cpp (4:8.3.0-1) ...
正在选中未选择的软件包 libcc1-0:amd64。
准备解压 .../13-libcc1-0_8.3.0-6_amd64.deb  ...
正在解压 libcc1-0:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libgomp1:amd64。
准备解压 .../14-libgomp1_8.3.0-6_amd64.deb  ...
正在解压 libgomp1:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libitm1:amd64。
准备解压 .../15-libitm1_8.3.0-6_amd64.deb  ...
正在解压 libitm1:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libatomic1:amd64。
准备解压 .../16-libatomic1_8.3.0-6_amd64.deb  ...
正在解压 libatomic1:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libasan5:amd64。
准备解压 .../17-libasan5_8.3.0-6_amd64.deb  ...
正在解压 libasan5:amd64 (8.3.0-6) ...
正在选中未选择的软件包 liblsan0:amd64。
准备解压 .../18-liblsan0_8.3.0-6_amd64.deb  ...
正在解压 liblsan0:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libtsan0:amd64。
准备解压 .../19-libtsan0_8.3.0-6_amd64.deb  ...
正在解压 libtsan0:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libubsan1:amd64。
准备解压 .../20-libubsan1_8.3.0-6_amd64.deb  ...
正在解压 libubsan1:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libmpx2:amd64。
准备解压 .../21-libmpx2_8.3.0-6_amd64.deb  ...
正在解压 libmpx2:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libquadmath0:amd64。
准备解压 .../22-libquadmath0_8.3.0-6_amd64.deb  ...
正在解压 libquadmath0:amd64 (8.3.0-6) ...
正在选中未选择的软件包 libgcc-8-dev:amd64。
准备解压 .../23-libgcc-8-dev_8.3.0-6_amd64.deb  ...
正在解压 libgcc-8-dev:amd64 (8.3.0-6) ...
正在选中未选择的软件包 gcc-8。
准备解压 .../24-gcc-8_8.3.0-6_amd64.deb  ...
正在解压 gcc-8 (8.3.0-6) ...
正在选中未选择的软件包 gcc。
准备解压 .../25-gcc_4%3a8.3.0-1_amd64.deb  ...
正在解压 gcc (4:8.3.0-1) ...
正在选中未选择的软件包 libstdc++-8-dev:amd64。
准备解压 .../26-libstdc++-8-dev_8.3.0-6_amd64.deb  ...
正在解压 libstdc++-8-dev:amd64 (8.3.0-6) ...
正在选中未选择的软件包 g++-8。
准备解压 .../27-g++-8_8.3.0-6_amd64.deb  ...
正在解压 g++-8 (8.3.0-6) ...
正在选中未选择的软件包 g++。
准备解压 .../28-g++_4%3a8.3.0-1_amd64.deb  ...
正在解压 g++ (4:8.3.0-1) ...
正在选中未选择的软件包 make。
准备解压 .../29-make_4.2.1-1.2_amd64.deb  ...
正在解压 make (4.2.1-1.2) ...
正在选中未选择的软件包 libdpkg-perl。
准备解压 .../30-libdpkg-perl_1.19.7_all.deb  ...
正在解压 libdpkg-perl (1.19.7) ...
正在选中未选择的软件包 dpkg-dev。
准备解压 .../31-dpkg-dev_1.19.7_all.deb  ...
正在解压 dpkg-dev (1.19.7) ...
正在选中未选择的软件包 build-essential。
准备解压 .../32-build-essential_12.6_amd64.deb  ...
正在解压 build-essential (12.6) ...
正在选中未选择的软件包 libassuan0:amd64。
准备解压 .../33-libassuan0_2.5.2-1_amd64.deb  ...
正在解压 libassuan0:amd64 (2.5.2-1) ...
正在选中未选择的软件包 gpgconf。
准备解压 .../34-gpgconf_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 gpgconf (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 libksba8:amd64。
准备解压 .../35-libksba8_1.3.5-2_amd64.deb  ...
正在解压 libksba8:amd64 (1.3.5-2) ...
正在选中未选择的软件包 libnpth0:amd64。
准备解压 .../36-libnpth0_1.6-1_amd64.deb  ...
正在解压 libnpth0:amd64 (1.6-1) ...
正在选中未选择的软件包 dirmngr。
准备解压 .../37-dirmngr_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 dirmngr (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 libfakeroot:amd64。
准备解压 .../38-libfakeroot_1.23-1_amd64.deb  ...
正在解压 libfakeroot:amd64 (1.23-1) ...
正在选中未选择的软件包 fakeroot。
准备解压 .../39-fakeroot_1.23-1_amd64.deb  ...
正在解压 fakeroot (1.23-1) ...
正在选中未选择的软件包 gnupg-l10n。
准备解压 .../40-gnupg-l10n_2.2.12-1+deb10u1_all.deb  ...
正在解压 gnupg-l10n (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 gnupg-utils。
准备解压 .../41-gnupg-utils_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 gnupg-utils (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 gpg。
准备解压 .../42-gpg_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 gpg (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 pinentry-curses。
准备解压 .../43-pinentry-curses_1.1.0-2_amd64.deb  ...
正在解压 pinentry-curses (1.1.0-2) ...
正在选中未选择的软件包 gpg-agent。
准备解压 .../44-gpg-agent_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 gpg-agent (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 gpg-wks-client。
准备解压 .../45-gpg-wks-client_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 gpg-wks-client (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 gpg-wks-server。
准备解压 .../46-gpg-wks-server_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 gpg-wks-server (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 gpgsm。
准备解压 .../47-gpgsm_2.2.12-1+deb10u1_amd64.deb  ...
正在解压 gpgsm (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 gnupg。
准备解压 .../48-gnupg_2.2.12-1+deb10u1_all.deb  ...
正在解压 gnupg (2.2.12-1+deb10u1) ...
正在选中未选择的软件包 libalgorithm-diff-perl。
准备解压 .../49-libalgorithm-diff-perl_1.19.03-2_all.deb  ...
正在解压 libalgorithm-diff-perl (1.19.03-2) ...
正在选中未选择的软件包 libalgorithm-diff-xs-perl。
准备解压 .../50-libalgorithm-diff-xs-perl_0.04-5+b1_amd64.deb  ...
正在解压 libalgorithm-diff-xs-perl (0.04-5+b1) ...
正在选中未选择的软件包 libalgorithm-merge-perl。
准备解压 .../51-libalgorithm-merge-perl_0.08-3_all.deb  ...
正在解压 libalgorithm-merge-perl (0.08-3) ...
正在选中未选择的软件包 libfile-fcntllock-perl。
准备解压 .../52-libfile-fcntllock-perl_0.22-3+b5_amd64.deb  ...
正在解压 libfile-fcntllock-perl (0.22-3+b5) ...
正在选中未选择的软件包 manpages-dev。
准备解压 .../53-manpages-dev_4.16-2_all.deb  ...
正在解压 manpages-dev (4.16-2) ...
正在设置 libksba8:amd64 (1.3.5-2) ...
正在设置 libfile-fcntllock-perl (0.22-3+b5) ...
正在设置 libalgorithm-diff-perl (1.19.03-2) ...
正在设置 manpages (4.16-2) ...
正在设置 binutils-common:amd64 (2.31.1-16) ...
正在设置 linux-libc-dev:amd64 (4.19.118-2+deb10u1) ...
正在设置 libnpth0:amd64 (1.6-1) ...
正在设置 libassuan0:amd64 (2.5.2-1) ...
正在设置 libgomp1:amd64 (8.3.0-6) ...
正在设置 libfakeroot:amd64 (1.23-1) ...
正在设置 fakeroot (1.23-1) ...
update-alternatives: 使用 /usr/bin/fakeroot-sysv 来在自动模式中提供 /usr/bin/fakeroot (fakeroot)
正在设置 libasan5:amd64 (8.3.0-6) ...
正在设置 make (4.2.1-1.2) ...
正在设置 libmpfr6:amd64 (4.0.2-1) ...
正在设置 gnupg-l10n (2.2.12-1+deb10u1) ...
正在设置 libquadmath0:amd64 (8.3.0-6) ...
正在设置 libmpc3:amd64 (1.1.0-1) ...
正在设置 libatomic1:amd64 (8.3.0-6) ...
正在设置 libdpkg-perl (1.19.7) ...
正在设置 libmpx2:amd64 (8.3.0-6) ...
正在设置 libubsan1:amd64 (8.3.0-6) ...
正在设置 libisl19:amd64 (0.20-2) ...
正在设置 gpgconf (2.2.12-1+deb10u1) ...
正在设置 libbinutils:amd64 (2.31.1-16) ...
正在设置 cpp-8 (8.3.0-6) ...
正在设置 libc-dev-bin (2.28-10) ...
正在设置 libalgorithm-diff-xs-perl (0.04-5+b1) ...
正在设置 libcc1-0:amd64 (8.3.0-6) ...
正在设置 gpg (2.2.12-1+deb10u1) ...
正在设置 liblsan0:amd64 (8.3.0-6) ...
正在设置 libitm1:amd64 (8.3.0-6) ...
正在设置 libalgorithm-merge-perl (0.08-3) ...
正在设置 gnupg-utils (2.2.12-1+deb10u1) ...
正在设置 binutils-x86-64-linux-gnu (2.31.1-16) ...
正在设置 libtsan0:amd64 (8.3.0-6) ...
正在设置 pinentry-curses (1.1.0-2) ...
正在设置 manpages-dev (4.16-2) ...
正在设置 gpg-agent (2.2.12-1+deb10u1) ...
正在设置 gpgsm (2.2.12-1+deb10u1) ...
正在设置 binutils (2.31.1-16) ...
正在设置 dpkg-dev (1.19.7) ...
正在设置 dirmngr (2.2.12-1+deb10u1) ...
正在设置 libgcc-8-dev:amd64 (8.3.0-6) ...
正在设置 gpg-wks-server (2.2.12-1+deb10u1) ...
正在设置 cpp (4:8.3.0-1) ...
正在设置 libc6-dev:amd64 (2.28-10) ...
正在设置 libstdc++-8-dev:amd64 (8.3.0-6) ...
正在设置 gcc-8 (8.3.0-6) ...
正在设置 gpg-wks-client (2.2.12-1+deb10u1) ...
正在设置 gcc (4:8.3.0-1) ...
正在设置 g++-8 (8.3.0-6) ...
正在设置 gnupg (2.2.12-1+deb10u1) ...
正在设置 g++ (4:8.3.0-1) ...
update-alternatives: 使用 /usr/bin/g++ 来在自动模式中提供 /usr/bin/c++ (c++)
正在设置 build-essential (12.6) ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
正在处理用于 libc-bin (2.28-10) 的触发器 ...
yiyi@debian:~$ ls
smart_speaker  XPU-SmartSpeaker-Lab2020.6  XPU_Smart_Speaker_Lab2020.6
yiyi@debian:~$ cd XPU-SmartSpeaker-Lab2020.6/

yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ cat main.c
#include <stdio.h>
#include <curl/curl.h> //libcurl的头文件

int main(void)
{
    //以只写方式打开文件
    FILE* fp = fopen("hello.txt", "w");
    if (fp == NULL) //打开文件失败,打印错误信息并退出
    {
        perror("fopen() failed");
        return 1;
    }

    //将字符串写入文件
    fprintf(fp, "Hello world\n");

    //关闭文件
    fclose(fp);

    //初始化libcurl
    CURL* curl = curl_easy_init();
    if (curl == NULL)
    {
        perror("curl_easy_init() failed");
        return 1;
    }

    //准备HTTP请求消息,设置API地址(URI)
    curl_easy_setopt(curl, CURLOPT_URL, "https://coronavirus-tracker-api.herokuapp.com/v2/latest");

    //发送HTTP请求消息
    CURLcode error = curl_easy_perform(curl);
    if (error != CURLE_OK)
    {
        fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(error));
        curl_easy_cleanup(curl);
        return 1;
    }

    //释放libcurl申请的资源
    curl_easy_cleanup(curl);

    return 0;
}

yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ sudo apt install curl
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
  libcurl4
下列【新】软件包将被安装:
  curl libcurl4
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 596 kB 的归档。
解压缩后会消耗 1,123 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.ustc.edu.cn/debian buster/main amd64 libcurl4 amd64 7.64.0-4+deb10u1 [331 kB]
获取:2 http://mirrors.ustc.edu.cn/debian buster/main amd64 curl amd64 7.64.0-4+deb10u1 [264 kB]
已下载 596 kB,耗时 1秒 (746 kB/s)
正在选中未选择的软件包 libcurl4:amd64。
(正在读取数据库 ... 系统当前共安装有 34445 个文件和目录。)
准备解压 .../libcurl4_7.64.0-4+deb10u1_amd64.deb  ...
正在解压 libcurl4:amd64 (7.64.0-4+deb10u1) ...
正在选中未选择的软件包 curl。
准备解压 .../curl_7.64.0-4+deb10u1_amd64.deb  ...
正在解压 curl (7.64.0-4+deb10u1) ...
正在设置 libcurl4:amd64 (7.64.0-4+deb10u1) ...
正在设置 curl (7.64.0-4+deb10u1) ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
正在处理用于 libc-bin (2.28-10) 的触发器 ...
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ curl -X GET "http://coronavirus-tracker-api.herokuapp.com/v2/latest"
{"latest":{"confirmed":10302151,"deaths":505505,"recovered":0}}yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$

yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ sudo apt install libcurl4-openssl-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
建议安装:
  libcurl4-doc libidn11-dev libkrb5-dev libldap2-dev librtmp-dev libssh2-1-dev
  libssl-dev pkg-config zlib1g-dev
下列【新】软件包将被安装:
  libcurl4-openssl-dev
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 419 kB 的归档。
解压缩后会消耗 1,521 kB 的额外空间。
获取:1 http://mirrors.ustc.edu.cn/debian buster/main amd64 libcurl4-openssl-dev amd64 7.64.0-4+deb10u1 [419 kB]
已下载 419 kB,耗时 1秒 (306 kB/s)
正在选中未选择的软件包 libcurl4-openssl-dev:amd64。
(正在读取数据库 ... 系统当前共安装有 34460 个文件和目录。)
准备解压 .../libcurl4-openssl-dev_7.64.0-4+deb10u1_amd64.deb  ...
正在解压 libcurl4-openssl-dev:amd64 (7.64.0-4+deb10u1) ...
正在设置 libcurl4-openssl-dev:amd64 (7.64.0-4+deb10u1) ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$

yiyi@debian:~$ ls
smart_speaker  XPU-SmartSpeaker-Lab2020.6  XPU_Smart_Speaker_Lab2020.6
yiyi@debian:~$ cd XPU-SmartSpeaker-Lab2020.6/
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ ls
hello.c  LICENSE  main.c  notes

yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ curl -X -GET "https://coronavirus-tracker-api.herokuapp.com/v2/latest"

<!DOCTYPE html>
        <html>
          <head>
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <meta charset="utf-8">
                <title>Application Error</title>
                <style media="screen">
                  html,body,iframe {
                        margin: 0;
                        padding: 0;
                  }
                  html,body {
                        height: 100%;
                        overflow: hidden;
                  }
                  iframe {
                        width: 100%;
                        height: 100%;
                        border: 0;
                  }
                </style>
          </head>
          <body>
                <iframe src="//www.herokucdn.com/error-pages/application-error.html"></iframe>
          </body>
        </html>yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$
        
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ cd


20200701课程实现情况

###***\*作业提交\****
yiyi@debian:~$ mkdir 41703030304
yiyi@debian:~$ ls
41703030304    XPU-SmartSpeaker-Lab2020.6
smart_speaker  XPU_Smart_Speaker_Lab2020.6
yiyi@debian:~$ cd 41703030304/
yiyi@debian:~/41703030304$ git init
已初始化空的 Git 仓库于 /home/yiyi/41703030304/.git/

yiyi@debian:~/41703030304$ ls
yiyi@debian:~/41703030304$ cd
yiyi@debian:~$ ls
41703030304    XPU-SmartSpeaker-Lab2020.6
smart_speaker  XPU_Smart_Speaker_Lab2020.6
yiyi@debian:~$ cd XPU-SmartSpeaker-Lab2020.6/
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ ls
笔记.md  cJSON.c  cJSON.h  hello.c  LICENSE  main.c  notes
##下载cJSON
yiyi@debian:~$ git clone https://github.com/DaveGamble/cJSON.git
正克隆到 'cJSON'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 4422 (delta 2), reused 3 (delta 0), pack-reused 4413
接收对象中: 100% (4422/4422), 2.41 MiB | 9.00 KiB/s, 完成.
处理 delta 中: 100% (2944/2944), 完成.
yiyi@debian:~$ ls
41703030304  smart_speaker               XPU_Smart_Speaker_Lab2020.6
cJSON        XPU-SmartSpeaker-Lab2020.6
yiyi@debian:~$ cd cJSON/
#修改到cJSONv1.7.13
yiyi@debian:~/cJSON$ git tag
v0.0.0
v1.0.0
v1.0.1
v1.0.2
v1.1.0
v1.2.0
v1.2.1
v1.3.0
v1.3.1
v1.3.2
v1.4.0
v1.4.1
v1.4.2
v1.4.3
v1.4.4
v1.4.5
v1.4.6
v1.4.7
v1.5.0
v1.5.1
v1.5.2
v1.5.3
v1.5.4
v1.5.5
v1.5.6
v1.5.7
v1.5.8
v1.5.9
v1.6.0
v1.7.0
v1.7.1
v1.7.10
v1.7.11
v1.7.12
v1.7.13
v1.7.2
v1.7.3
v1.7.4
v1.7.5
v1.7.6
v1.7.7
v1.7.8
v1.7.9
yiyi@debian:~/cJSON$ git checkout v1.7.13 .
yiyi@debian:~/cJSON$ cp cJSON.c cJSON.h ../41703030304/
yiyi@debian:~/cJSON$ cd ../41703030304/
yiyi@debian:~/41703030304$ cd

yiyi@debian:~$ curl -X -GET "https://coronavirus-tracker-api.herokuapp.com/v2/latest"
<!DOCTYPE html>
        <html>
          <head>
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <meta charset="utf-8">
                <title>Application Error</title>
                <style media="screen">
                  html,body,iframe {
                        margin: 0;
                        padding: 0;
                  }
                  html,body {
                        height: 100%;
                        overflow: hidden;
                  }
                  iframe {
                        width: 100%;
                        height: 100%;
                        border: 0;
                  }
                </style>
          </head>
          <body>
                <iframe src="//www.herokucdn.com/error-pages/application-error.html"></iframe>
          </body>
        </html>yiyi@debian:~$
yiyi@debian:~$

yiyi@debian:~$ git clone https://gitee.com/liuyixiao_xpu/XPU-SmartSpeaker-Lab2020.6.git
fatal: 目标路径 'XPU-SmartSpeaker-Lab2020.6' 已经存在,并且不是一个空目录。

#删除一个文件夹及其子目录的所有文件
yiyi@debian:~$ rm -rf XPU-SmartSpeaker-Lab2020.6/
#克隆个人码云克隆华清远见的库
yiyi@debian:~$ git clone https://gitee.com/liuyixiao_xpu/XPU-SmartSpeaker-Lab2020.6.git
正克隆到 'XPU-SmartSpeaker-Lab2020.6'...
remote: Enumerating objects: 50, done.
remote: Counting objects: 100% (50/50), done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 50 (delta 8), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (50/50), 完成.

yiyi@debian:~$
yiyi@debian:~$ ls
41703030304  smart_speaker               XPU_Smart_Speaker_Lab2020.6
cJSON        XPU-SmartSpeaker-Lab2020.6
yiyi@debian:~$ cd XPU-SmartSpeaker-Lab2020.6/
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ ls
cJSON.c  cJSON.h  LICENSE  main.c  notes
#把/XPU-SmartSpeaker-Lab2020.6$ cp main.c复制到../41703030304/
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ cp main.c  ../41703030304/
yiyi@debian:~/XPU-SmartSpeaker-Lab2020.6$ cd

yiyi@debian:~$ cd 41703030304/
yiyi@debian:~/41703030304$ ls
cJSON.c  cJSON.h  main.c
yiyi@debian:~/41703030304$

yiyi@debian:~$
##编译
yiyi@debian:~/41703030304$ cc main.c cJSON.c -o main -lcurl
yiyi@debian:~/41703030304$ ls
cJSON.c  cJSON.h  main  main.c
yiyi@debian:~/41703030304$
##运行编译文件
yiyi@debian:~/41703030304$ ./main
确诊人数: 10475826
死亡人数: 511253
yiyi@debian:~/41703030304$

##查看main.c
yiyi@debian:~/41703030304$ cat main.c
#include <stdio.h>
#include <stdlib.h> //malloc使用的头文件
#include <curl/curl.h> //libcurl的头文件
#include "cJSON.h" //cJSON的头文件

int main(void)
{
    //以只写方式打开文件
    FILE* fp = fopen("hello.txt", "w");
    if (fp == NULL) //打开文件失败,打印错误信息并退出
    {
        perror("fopen() failed");
        return 1;
    }

    //初始化libcurl
    CURL* curl = curl_easy_init();
    if (curl == NULL)
    {
        perror("curl_easy_init() failed");
        return 1;
    }

    //准备HTTP请求消息,设置API地址(URI)
    curl_easy_setopt(curl, CURLOPT_URL, "https://coronavirus-tracker-api.herokuapp.com/v2/latest");
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

    //发送HTTP请求消息
    CURLcode error = curl_easy_perform(curl);
    if (error != CURLE_OK)
    {
        fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(error));
        curl_easy_cleanup(curl);
        return 1;
    }

    //释放libcurl申请的资源
    curl_easy_cleanup(curl);

    //关闭文件
    fclose(fp);

    //以只读方式打开文件
    fp = fopen("hello.txt", "r");
    if (fp == NULL) //打开文件失败,打印错误信息并退出
    {
        perror("fopen() failed");
        return 1;
    }

    //将文件指针定位到文件末尾
    fseek(fp, 0, SEEK_END);
    //获取文件指针的当前位置,即文件的大小
    long size = ftell(fp);
    //将文件指针重新定位到文件头
    fseek(fp, 0, SEEK_SET);

    //分配文件大小相同的内存空间
    char* jsonstr = malloc(size);

    //将文件中的内容读取到内存中
    fread(jsonstr, 1, size, fp);

    fclose(fp);

    //解析JSON字符串
    cJSON* json = cJSON_Parse(jsonstr);

    cJSON* latest = cJSON_GetObjectItemCaseSensitive(json, "latest");

    cJSON* comfirmed = cJSON_GetObjectItemCaseSensitive(latest, "confirmed");

    cJSON* deaths = cJSON_GetObjectItemCaseSensitive(latest, "deaths");

    printf("确诊人数: %d\n", comfirmed->valueint);
    printf("死亡人数: %d\n", deaths->valueint);

    //释放json数据结构占用的内存
    cJSON_free(json);

    return 0;
}

上传到码云

##不知道什么原因不能直接上传新目录到码云
yiyi@debian:~/41703030304$ git push https://gitee.com/liuyixiao_xpu/lyx41703030304.git
fatal: 当前分支 master 没有对应的上游分支。
为推送当前分支并建立与远程上游的跟踪,使用

    git push --set-upstream https://gitee.com/liuyixiao_xpu/lyx41703030304.git master

yiyi@debian:~/41703030304$ git push --set-upstream https://gitee.com/liuyixiao_xpu/lyx41703030304.git master
Username for 'https://gitee.com': liuyixiao_xpu
Password for 'https://liuyixiao_xpu@gitee.com':
To https://gitee.com/liuyixiao_xpu/lyx41703030304.git
 ! [rejected]        master -> master (fetch first)
error: 推送一些引用到 'https://gitee.com/liuyixiao_xpu/lyx41703030304.git' 失败
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。


###在码云上新建一个lyx41703030304的git并克隆到本地
yiyi@debian:~/41703030304$ cd
yiyi@debian:~$ git clone https://gitee.com/liuyixiao_xpu/lyx41703030304.git
正克隆到 'lyx41703030304'...
Username for 'https://gitee.com': 18191030078
Password for 'https://18191030078@gitee.com':
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (4/4), 完成.
yiyi@debian:~$ ls
41703030304  lyx41703030304  XPU-SmartSpeaker-Lab2020.6
cJSON        smart_speaker   XPU_Smart_Speaker_Lab2020.6

###将41703030304目录及其子目录下的文件拷贝到lyx41703030304中
yiyi@debian:~$ cp -r 41703030304 lyx41703030304
yiyi@debian:~$ cd lyx41703030304/
yiyi@debian:~/lyx41703030304$ ls
41703030304  README.en.md  README.md

###查看工作区状态
yiyi@debian:~/lyx41703030304$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

        41703030304/

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

###将文件修改保存到暂存区
yiyi@debian:~/lyx41703030304$ git add 41703030304/

###查看工作区状态
yiyi@debian:~/lyx41703030304$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

        新文件:   41703030304/cJSON.c
        新文件:   41703030304/cJSON.h
        新文件:   41703030304/hello.txt
        新文件:   41703030304/main
        新文件:   41703030304/main.c

###将暂存区的修改提交到代码库
yiyi@debian:~/lyx41703030304$ git commit -m "20200701实习代码"
[master afc77ed] 20200701实习代码
 5 files changed, 3450 insertions(+)
 create mode 100644 41703030304/cJSON.c
 create mode 100644 41703030304/cJSON.h
 create mode 100644 41703030304/hello.txt
 create mode 100755 41703030304/main
 create mode 100644 41703030304/main.c
 
###查看工作区状态
yiyi@debian:~/lyx41703030304$ git status
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
  (使用 "git push" 来发布您的本地提交)

无文件要提交,干净的工作区

### 查看提交历史记录
yiyi@debian:~/lyx41703030304$ git log
commit afc77ed79e679aaac90b88124bf1b76d6e5f88a8 (HEAD -> master)
Author: 刘懿宵 <liuyixiao@stu.xpu.edu.cn>
Date:   Wed Jul 1 23:25:30 2020 +0800

    20200701实习代码

commit b222ef156181a0ee602520b2bf5ddbd09d4b24b9 (origin/master, origin/HEAD)
Author: 刘懿宵 <liuyixiao@stu.xpu.edu.cn>
Date:   Wed Jul 1 23:15:02 2020 +0800

    Initial commit
    
###同步本地代码库到远程
yiyi@debian:~/lyx41703030304$ git push
Username for 'https://gitee.com': liuyixiao_xpu
Password for 'https://liuyixiao_xpu@gitee.com':
枚举对象: 9, 完成.
对象计数中: 100% (9/9), 完成.
压缩对象中: 100% (8/8), 完成.
写入对象中: 100% (8/8), 35.32 KiB | 5.04 MiB/s, 完成.
总共 8 (差异 0),复用 0 (差异 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/liuyixiao_xpu/lyx41703030304.git
   b222ef1..afc77ed  master -> master
yiyi@debian:~/lyx41703030304$

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWNRG70n-1593707571354)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200701232920866.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-khtEYdrW-1593707571357)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200701232927090.png)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 简介1 1.1 自动语音识别:更好的沟通之桥 1 1.1.1 人类之间的交流 2 1.1.2 人机交流 2 1.2 语音识别系统的基本结构 4 1.3 全书结构 6 1.3.1 第一部分:传统声学模型6 1.3.2 第二部分:深度神经网络6 1.3.3 第三部分:语音识别中的DNN-HMM 混合系统7 1.3.4 第四部分:深度神经网络中的特征表示学习 7 1.3.5 第五部分:高级的深度模型 7 第一部分传统声学模型9 2 混合高斯模型10 2.1 随机变量10 2.2 高斯分布和混合高斯随机变量11 2.3 参数估计13 2.4 采用混合高斯分布对语音特征建模 15 3 隐马尔可夫模型及其变体17 3.1 介绍17 3.2 马尔可夫链19 3.3 序列与模型 20 3.3.1 隐马尔可夫模型的性质21 3.3.2 隐马尔可夫模型的仿真22 3.3.3 隐马尔可夫模型似然度的计算22 3.3.4 计算似然度的高效算法24 3.3.5 前向与后向递归式的证明25 3.4 期望zui大化算法及其在学习HMM 参数中的应用 26 3.4.1 期望zui大化算法介绍 26 3.4.2 使用EM 算法来学习HMM 参数——Baum-Welch 算法 28 3.5 用于解码HMM 状态序列的维特比算法32 3.5.1 动态规划和维特比算法32 3.5.2 用于解码HMM 状态的动态规划算法33 3.6 隐马尔可夫模型和生成语音识别模型的变体35 3.6.1 用于语音识别的GMM-HMM 模型 36 3.6.2 基于轨迹和隐藏动态模型的语音建模和识别37 3.6.3 使用生成模型HMM 及其变体解决语音识别问题 38 第二部分深度神经网络41 4 深度神经网络42 4.1 深度神经网络框架42 4.2 使用误差反向传播来进行参数训练 45 4.2.1 训练准则 45 4.2.2 训练算法46 4.3 实际应用50 4.3.1 数据预处理51 4.3.2 模型初始化52 4.3.3 权重衰减52 4.3.4 丢弃法 53 4.3.5 批量块大小的选择55 4.3.6 取样随机化56 4.3.7 惯性系数 57 4.3.8 学习率和停止准则58 4.3.9 网络结构59 4.3.10 可复现性与可重启性 59 5 高级模型初始化技术61 5.1 受限玻尔兹曼机61 5.1.1 受限玻尔兹曼机的属性63 5.1.2 受限玻尔兹曼机参数学习66 5.2 深度置信网络预训练 69 5.3 降噪自动编码器预训练71 5.4 鉴别性预训练74 5.5 混合预训练75 5.6 采用丢弃法的预训练 75 第三部分语音识别中的深度神经网络–隐马尔可夫混合模型77 6 深度神经网络–隐马尔可夫模型混合系统78 6.1 DNN-HMM 混合系统 78 6.1.1 结构78 6.1.2 用CD-DNN-HMM 解码80 6.1.3 CD-DNN-HMM 训练过程81 6.1.4 上下文窗口的影响83 6.2 CD-DNN-HMM 的关键模块及分析 85 6.2.1 进行比较和分析的数据集和实验85 6.2.2 对单音素或者三音素的状态进行建模 87 6.2.3 越深越好88 6.2.4 利用相邻的语音帧89 6.2.5 预训练 90 6.2.6 训练数据的标注质量的影响 90 6.2.7 调整转移概率 91 6.3 基于KL 距离的隐马尔可夫模型91 7 训练和解码的加速93 7.1 训练加速93 7.1.1 使用多GPU 流水线反向传播94 7.1.2 异步随机梯度下降97 7.1.3 增广拉格朗日算法及乘子方向交替算法100 7.1.4 减小模型规模 101 7.1.5 其他方法102 7.2 加速解码103 7.2.1 并行计算103 7.2.2 稀疏网络105 7.2.3 低秩近似107 7.2.4 用大尺寸DNN 训练小尺寸DNN108 7.2.5 多帧DNN 109 8 深度神经网络序列鉴别性训练111 8.1 序列鉴别性训练准则 111 8.1.1 zui大相互信息 112 8.1.2 增强型MMI 113 8.1.3 zui小音素错误/状态级zui小贝叶斯风险114 8.1.4 统一的公式115 8.2 具体实现中的考量116 8.2.1 词图产生116 8.2.2 词图补偿117 8.2.3 帧平滑 119 8.2.4 学习率调整119 8.2.5 训练准则选择 120 8.2.6 其他考量120 8.3 噪声对比估计 121 8.3.1 将概率密度估计问题转换为二分类设计问题121 8.3.2 拓展到未归一化的模型123 8.3.3 在深度学习网络训练中应用噪声对比估计算法 124 第四部分深度神经网络中的特征表示学习127 9 深度神经网络中的特征表示学习128 9.1 特征和分类器的联合学习128 9.2 特征层级129 9.3 使用随意输入特征的灵活性 133 9.4 特征的鲁棒性 134 9.4.1 对说话人变化的鲁棒性134 9.4.2 对环境变化的鲁棒性 135 9.5 对环境的鲁棒性137 9.5.1 对噪声的鲁棒性138 9.5.2 对语速变化的鲁棒性 140 9.6 缺乏严重信号失真情况下的推广能力141 10 深度神经网络和混合高斯模型的融合144 10.1 在GMM-HMM 系统中使用由DNN 衍生的特征144 10.1.1 使用Tandem 和瓶颈特征的GMM-HMM 模型144 10.1.2 DNN-HMM 混合系统与采用深度特征的GMM-HMM 系统的比较147 10.2 识别结果融合技术149 10.2.1 识别错误票选降低技术(ROVER) 149 10.2.2 分段条件随机场(SCARF) 151 10.2.3 zui小贝叶斯风险词图融合153 10.3 帧级别的声学分数融合153 10.4 多流语音识别 154 11 深度神经网络的自适应技术157 11.1 深度神经网络中的自适应问题157 11.2 线性变换159 11.2.1 线性输入网络.159 11.2.2 线性输出网络 159 11.3 线性隐层网络 161 11.4 保守训练162 11.4.1 L2 正则项163 11.4.2 KL 距离正则项163 11.4.3 减少每个说话人的模型开销 165 11.5 子空间方法167 11.5.1 通过主成分分析构建子空间 167 11.5.2 噪声感知、说话人感知及设备感知训练168 11.5.3 张量172 11.6 DNN 说话人自适应的效果172 11.6.1 基于KL 距离的正则化方法 173 11.6.2 说话人感知训练174 第五部分先进的深度学习模型177 12 深度神经网络中的表征共享和迁移178 12.1 多任务和迁移学习178 12.1.1 多任务学习 178 12.1.2 迁移学习180 12.2 多语言和跨语言语音识别180 12.2.1 基于Tandem 或瓶颈特征的跨语言语音识别181 12.2.2 共享隐层的多语言深度神经网络182 12.2.3 跨语言模型迁移185 12.3 语音识别中深度神经网络的多目标学习188 12.3.1 使用多任务学习的鲁棒语音识别188 12.3.2 使用多任务学习改善音素识别189 12.3.3 同时识别音素和字素(graphemes) 190 12.4 使用视听信息的鲁棒语音识别 190 13 循环神经网络及相关模型192 13.1 介绍192 13.2 基本循环神经网络中的状态-空间公式194 13.3 沿时反向传播学习算法195 13.3.1 zui小化目标函数 196 13.3.2 误差项的递归计算196 13.3.3 循环神经网络权重的更新197 13.4 一种用于学习循环神经网络的原始对偶技术199 13.4.1 循环神经网络学习的难点199 13.4.2 回声状态(Echo-State)性质及其充分条件 199 13.4.3 将循环神经网络的学习转化为带约束的优化问题 200 13.4.4 一种用于学习RNN 的原始对偶方法201 13.5 结合长短时记忆单元(LSTM)的循环神经网络203 13.5.1 动机与应用203 13.5.2 长短时记忆单元的神经元架构204 13.5.3 LSTM-RNN 的训练205 13.6 循环神经网络的对比分析205 13.6.1 信息流方向的对比:自上而下还是自下而上 206 13.6.2 信息表征的对比:集中式还是分布式208 13.6.3 解释能力的对比:隐含层推断还是端到端学习209 13.6.4 参数化方式的对比:吝啬参数集合还是大规模参数矩阵 209 13.6.5 模型学习方法的对比:变分推理还是梯度下降210 13.6.6 识别正确率的比较211 13.7 讨论212 14 计算型网络214 14.1 计算型网络214 14.2 前向计算215 14.3 模型训练 218 14.4 典型的计算节点222 14.4.1 无操作数的计算节点 223 14.4.2 含一个操作数的计算节点223 14.4.3 含两个操作数的计算节点228 14.4.4 用来计算统计量的计算节点类型235 14.5 卷积神经网络 236 14.6 循环连接 239 14.6.1 只在循环中一个接一个地处理样本240 14.6.2 同时处理多个句子242 14.6.3 创建任意的循环神经网络243 15 总结及未来研究方向245 15.1 路线图 245 15.1.1 语音识别中的深度神经网络启蒙245 15.1.2 深度神经网络训练和解码加速248 15.1.3 序列鉴别性训练248 15.1.4 特征处理249 15.1.5 自适应 250 15.1.6 多任务和迁移学习251 15.1.7 卷积神经网络 251 15.1.8 循环神经网络和长短时记忆神经网络251 15.1.9 其他深度模型 252 15.2 技术前沿和未来方向 252 15.2.1 技术前沿简析252 15.2.2 未来方向253

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值