update some info about rust

This commit is contained in:
shzhxh 2021-05-21 19:30:00 +08:00
parent 472cf81df1
commit 0175fae291
43 changed files with 553 additions and 88 deletions

View File

@ -26,11 +26,19 @@
```rust
// 条件编译
cfg // 控制条件编译
cfg_attr // 有条件地包含属性
// 测试
// 派生
derive // 自动特性实现
// 宏
macro_use // 扩展宏的可见性或从其它crate导入宏。
// 诊断
allow, warn, deny, forbid // 改变默认的检测级别
allow(c) // 撤销对c的检查这样违规行为将不会被报告
warn(c) // 对c的违规行为将发出警告但仍然会继续编译
deny(c) // 如遇到c的违规行为将发出error信号
forbid(c) // 类似于deny(c),且禁止更改检测级别
// ABI链接符号FFI
no_main // 不会加载"main"标记
no_mangle // 禁止符号名编码
@ -41,6 +49,7 @@ no_std // 不会预加载std
// 模块
// 限制
// 运行时
global_allocator // 实现了GlobalAlloc特性的静态条目用此属性来设置全局内存分配器.
// 性质
feature // 使能开发中的,或实验性的编译器属性。
// 类型系统

View File

@ -1,21 +0,0 @@
#### 简介
格式化字符串或打印字符串的工具。
#### 宏
Debug
#### 结构体
#### 枚举类型
#### 特性
#### 函数
write
#### 类型定义
Result

View File

@ -0,0 +1,37 @@
#### 简介
使用了buddy系统的裸金属分配器。
#### 模块
##### linked_list
#### 结构体
##### FrameAllocator
##### Heap
次序可配置的堆
##### LockedFrameAllocator
##### LockedHeap
堆的带锁版本
```rust
// 实现
pub const fn new() -> Self // 创建一个空堆
pub const fn empty9) -> Self // 创建一个堆
// 来自于Deref<Target = Mutex<Heap<ORDER>>>的方法
pub fn is_locked(&self) -> bool // 如果持有锁则返回true
pub fn lock(&self) -> MutexGuard<'_, T> // 锁定Mutex并返回guard使用此guard可以访问内部数据
pub unsafe fn force_unlock(&self) // 强制解锁Mutex
pub fn try_lock(&self) -> Option<MutexGuard<'_, T>> // 尝试锁定Mutex如成功则返回一个guard
```
##### LockedHeapWithRescue

View File

@ -0,0 +1,15 @@
#### 简介
一个用于延迟静态求值的宏。
#### 宏
##### lazy_static
#### 特性
##### LazyStatic
#### 函数
##### initialize

View File

@ -0,0 +1,29 @@
#### 简介
提供`std::sync`和`std::lazy`里关于自旋的原语。适用于`no_std`的环境。
#### 重新导出
```rust
pub use mutex::MutexGuard;
```
#### 模块
##### mutex
mutex的锁
```rust
// 模块
spin
ticket
// 结构体
Mutex // 一个基于自旋的锁,提供对数据的互斥访问
MutexGuard // 对数据访问提供通用的保护使用ticket锁或自旋锁
```
#### 类型定义

View File

@ -0,0 +1,63 @@
#### 简介
内存分配APIs。
#### 结构体
##### AllocError
##### Global
##### Layout
##### LayoutError
#### 特性
##### Allocator
##### GlobalAlloc
这是一个内存分配器,可通过`#[global_allocator]`属性注册为标准库的默认值。
```rust
pub unsafe trait GlobalAlloc {
pub unsafe fn alloc(&self, layout: Layout) -> *mut u8;
pub unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout);
pub unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { ... }
pub unsafe fn realloc(
&self,
ptr: *mut u8,
layout: Layout,
new_size: usize
) -> *mut u8 { ... }
}
```
#### 函数
##### alloc
使用全局分配器分配内存
```rust
pub unsafe fn alloc(layout: Layout) -> *mut u8
```
##### alloc_zeroed
##### dealloc
##### handle_alloc_error
##### realloc
#### 类型定义
##### LayoutErr

View File

@ -0,0 +1,9 @@
#### 简介
用于堆分配的指针类型。
#### 结构体
##### Box
用于堆分配的指针类型。

View File

@ -0,0 +1,17 @@
#### 简介
一个可以持续增长的数组类型,它的内容由堆来分配,写作`Vec<T>`。
#### 数据结构
##### DrainFilter
##### Drain
##### Intolter
##### Splice
##### Vec
一个可以持续增长的数组类型,写作`Vec<T>`。

View File

@ -0,0 +1,38 @@
#### 简介
基本的特性和类型,代表了类型的基本属性。
按照Rust类型的固有属性可以有多种分类方式。这些分类用特性来表示。
#### 宏
```
Copy // 派生宏生成Copy特性
```
#### 结构体
```
PhantomData // 长度为0的类型这种类型表现的像它们拥有<T>
pub struct PhantomData<T: ?Sized>;
PhantomPinned // 一个marker类型它不实现Unpin。
```
#### 特性
```
DiscriminantKind
StructuralEq
StructuralPartialEq
Unsize
Copy
Send
Sized
Sync
Unpin
```

View File

@ -0,0 +1,33 @@
#### 简介
内存分配API
#### 结构体
##### AllocError
##### Layout
一块内存的布局
```rust
pub struct Layout { /* fields omitted */ }
// 实现
// 特性实现
// 自动特性实现
// 空白实现
```
##### LayoutError
#### 特性
##### Allocator
##### GlobalAlloc
#### 类型定义
LayoutErr : 已弃用。

View File

@ -0,0 +1,37 @@
#### 简介
格式化字符串或打印字符串的工具。
#### 宏
Debug
#### 结构体
#### 枚举类型
Alignment
#### 特性
Binary
##### Debug
`?`格式。即把输出格式化为面向程序员的,要调试的内容。若使用可选格式`#?`,输出会更好看些。
```rust
pub trait Debug {
fn fmt(&self, f: &mut Formatter<'_>) -> Result;
}
```
#### 函数
write
#### 类型定义
Result

View File

@ -34,6 +34,10 @@ crate::util // 模块路径crate::util即文件路径./util.rs或util/mod.rs
##### 6.3使用的声明(use)
##### 6.10静态条目
静态条目类似于常量只不过它代表的是程序中精确的内存位置。所有对静态条目的引用都会指向内存中相同的位置。静态条目有静态的生命周期即Rust程序中最长的生命周期。静态条目在程序结束的时候不会调用drop。
##### 6.13外部块
外部块是基本的Rust外部程序接口提供了不存在于当前crate中的条目。

View File

@ -1,34 +0,0 @@
注:不成功
#### 安装
##### 0. 环境
`ubuntu 16.04 x86_64`
##### 1. 下载源代码
```shell
git clone https://github.com/riscv-rust/riscv-rust-toolchain.git
cd riscv-rust-toolchain
git submodule update --init --recursive
```
##### 2. 安装依赖
```shell
sudo apt install autoconf automake bash bison cmake coreutils curl device-tree-compiler diffutils doxygen expat file findutils flex gawk git libgmp-dev make grep gzip libedit2 libssh2-1 libtool libusb-1.0-0 libxml2 mpc libmpfr4 ninja libncurses5 openssl patchelf pkg-config python2.7 sed swig tar texinfo zlib1g zsh
# 需要gcc-6
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-6 g++-6
```
##### 3. 编译
```shell
vim build-env.sh # 可选:修改安装目录,否则默认会安装在当前目录
sudo make toolchain
```

View File

@ -26,6 +26,14 @@
数组:单一类型的复合,长度固定。使用中括号和逗号定义。数据元素的访问方法为通过数组索引访问。
```rust
let a = [1, 2, 3]; // a是包含1,2,3三个数的数组
let a: [i32; 3] = [1, 2, 3]; // a是包含三个数的数组且元素类型为i32
let a = [0; 3]; // 数组a包含三个元素且这三个元素的值都是0
```
#### 3_3函数
以`fn`关键字定义函数。
@ -34,7 +42,11 @@
语句是不返回值的指令,以分号结尾;表达式计算并产生一个值,结尾没有分号。
函数如有返回值,要用箭头`->`声明其类型。`return`用以指明返回值,如没有`return`关键字则最后一个表达式的值为返回值。
函数如有**非空**的返回值,要用箭头`->`声明其类型。`return`用以指明返回值,如没有`return`关键字则最后一个表达式的值为返回值。
函数如有**空**的返回值,则表示为`-> ()`,意思是返回一个没有元素的元组。`-> ()`常常被省略。
函数如果**不**返回,则表示为`-> !`,这种函数叫发散函数(diverging function)。
#### 3_5控制流

View File

@ -0,0 +1,62 @@
#### wait, waitpid, waitid
等待子进程状态改变
```c
pid_t wait(int *wstatus);
// 只要有一个子进程终止就不再等待。相当于waitpid(-1, wstatus, 0).
// 返回值成功则返回子进程id错误返回-1。
// wstatus : NULL则忽略。非NULL,则用于保存子进程的状态信息。
pid_t waitpid(pid_t pid, int *wstatus, int options);
// 只有给定子进程pid状态改变才不再等待。
// 返回值成功则返回子进程id错误返回-1某些情况下返回0.
// pid : 小于-1则所等待的子进程的组id要等于|pid|
// 等于-1则等待任意子进程即可
// 等于0所等待的子进程的组id要等于父进程
// 大于0则所等待的子进程的id要等于pid。
// optons : 所等待的子进程的状态。
// WNOHANG : 无子进程退出。
// WUNTRACED :
// WCONTINUED :
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
// 提供更精确的控制
// 返回值成功返回0错误返回-1。
// idtype : P_PID , 所等待的子进程的进程号为id。
// P_PGID , 所等待的子进程的组id为id。
// P_ALL , 等待任意子进程此时忽略id。
struct siginfo_t {
pid_t si_pid; // 子进程的id
uid_t si_uid; // 子进程的用户id
int si_signo; //
int si_status; //
int si_code; //
}
// options : WEXITED
// WSTOPPED
// WCONTINUED
// WNOHANG
// WNOWAIT
pid_t wait3(int *wstatus, int options, struct rsuage *rusage);
// 返回值 与waitpid相同。
// rusage : NULL则忽略非NULL则保存子进程的统计信息。
pid_t wait4(pid_t pid, int *wstatus, int options, struct rusage *rusage);
// 返回值: 与waitpid相同。
```
#### gettimeofday
获取从1970-01-01 00:00:00 +0000(UTC)到现在经历的时间。这个时间记录在`TimeVal`中。
```c
ing gettimeofday(struct timeval *tv, int timezone)
struct timeval {
time_t sec; // 秒数
suseconds_t usec; // 微秒数
}
```

View File

@ -157,7 +157,6 @@ push
rename
restart # 重启容器。
rmi # 移除一个或多个镜像(最顶层)。可以使用-f来删除中间的只读层。
run # 相当于create + start
search
stats
stop # 停止一个或多个运行中的容器。
@ -239,6 +238,20 @@ docker rm [options] <containers> # 删除容器
-v, --volumes # 删除与容器相关的卷(volumes)
```
##### run
```
docker run [options] <image> [cmd] [args]
# 在一个新容器里运行命令相当于create + start
# 选项
-d, --detach # 在后台运行容器并打印容器的id
--name <string> # 指定容器名
--network <network> # 把容器连接到一个network
-v, --volume <list> # 绑定并挂载一个卷
```
##### save
```

View File

@ -10,6 +10,8 @@
--global # 修改~/.gitconfig里的配置文件但如果$XDG_CONFIG_HOME/git/config存在则修改之而不再修改~/.gitconfig。
--system # 修改/etc/gitconfig
--local # 修改.git/config里的配置文件
-l, --list # 列出配置文件中所有的键值对
--unset # 从配置文件中删除与key相匹配的行
```
@ -38,6 +40,8 @@
```
core.quotePath # 把路径里的不常用字符用反斜杠的方式来编码当这个变量设置为false的时候字符均不认为是不常用的。
http.proxy # 设置HTTP代理常使用环境变量http_proxy, https_proxy, all_proxy来设置。
http.<url>.* # 让配置http.*仅作用于给定的url。
```
#### 使用示例

View File

@ -2,19 +2,86 @@
把改变保存在一个dirty的工作区。它会把工作区和暂存区的状态都保存起来但只是保存到本地而不会推送到远程。
```
git stash <subcommand> [options]
```
#### 子命名
```
apply
branch <branch> [stash] # 从stash创建分支
clear # 删除所有的stash
create
drop # 移除stash
list # 列出当前stash
pop [stash] # 恢复之前的stash如不给出stash则默认使用stash@{0}
# 使用此命令有可能产生冲突此时需要手动解决冲突并使用git stash drop命令手动删除对应的stash
push [-m <message>] [--] [pathspec...] # 把本地的修改保存起来
show # 显示stash的内容
store
```
##### apply
```bash
git stash apply [options] [stash] # 把一个stash添加到工作区但不会从stash列表里删除对应stash
# 选项
--index
-q, --quiet
```
##### clear
```bash
clear # 删除所有的stash
```
##### drop
```bash
git stash drop [-q| --quiet] [stash] # 移除stash
```
##### list
```bash
git stash list [options] # 列出当前stash
```
##### pop
```bash
git stash pop [options] [stash] # 从stash列表里删除一个stash并把它添加到工作区如不给出stash则默认使用stash@{0}
# 使用此命令有可能产生冲突此时需要手动解决冲突并使用git stash drop命令手动删除对应的stash
# 选项
--index
-q, --quiet
```
##### push
```bash
git stash [push] [options] [--] [pathspec...] # 把本地的修改保存起来并回滚到HEAD
# 选项
-p, --patch
-k, --[no-]keep-index
-q, --quiet
-u, --include-untracked
-a, --all
-m, --message <msg>
```
##### store
```bash
git stash store
```

17
Software/gost.md Normal file
View File

@ -0,0 +1,17 @@
#### 选项
```
-C <string> # 配置文件
-D # 开启调试日志
-F <value> # 设置转发地址,可做成转发链
-L <value> # 监听地址,可监听多个端口
-V # 打印版本信息
-obfs4-distBias # 开启obfs4
# <value>的格式
[scheme://][user:pass@host]:port[?param1=value1&param2=value2]
# scheme : 协议类型或传输类型,或二者的组合,或空
# 默认协议类型:-L参数是HTTP&SOCKS5-F参数是HTTP
# 默认传输层类型原始TCP类型
# 组合用法示例http+tls, socks5+wss
```

View File

@ -0,0 +1,12 @@
```
gzip [options] [names] # 压缩或解压
```
#### 选项
```
-d, --decompress, --uncompress # 解压
```

3
Software/last.md Normal file
View File

@ -0,0 +1,3 @@
#### 简介
显示最近登陆的用户

View File

@ -13,6 +13,39 @@ tmux使用c/s结构主要包括如下模块
tmux [options] [command [flags]]
```
#### 命令
##### 客户端与会话
```bash
attach, attach-session [-dEr] [-c working-dir] [-t target-session]
# 如在tmux外部则在当前终端创建一个新的client并把它附加到target-session。如在tmux内部则切换到当前client。
ls, list-sessions [-F format]
# 列出server管理着的所有会话
new-session [options] [shell-cmd] # 创建一个新的会话。
-d # 新会话不附加到当前终端。(默认是附加到当前终端的)
rename, rename-session [-t target-session] new-name
# 给会话重命名
```
##### 窗口与面板
```bash
renamew, rename-window [-t target-vindow] new-name
# 给窗口重命名
```
##### 键绑定
#### 选项
可以通过变量的值来控制tmux的外观和行为。有三类选项server选项、session选项和window选项。
@ -27,27 +60,6 @@ show-window-options [-gv] [-t target-window] [option]
#### 命令
##### 窗户端与会话
```
attach, attach-session [-dEr] [-c working-dir] [-t target-session]
# 如在tmux外部则在当前终端创建一个新的client并把它附加到target-session。如在tmux内部则切换到当前client。
ls, list-sessions [-F format]
# 列出server管理着的所有会话
new-session [options] [shell-cmd] # 创建一个新的会话。
-d # 新会话不附加到当前终端。(默认是附加到当前终端的)
```
##### 窗口与面板
##### 键绑定
#### 激活控制台
```

3
Software/w.md Normal file
View File

@ -0,0 +1,3 @@
#### 简介
显示登陆的用户,以及这些用户做了些什么。

View File

@ -41,5 +41,23 @@ wget [option] [url]
##### 递归搜索
```
-r, --recursive # 开启递归搜索默认深度为5.
-k, --convert-links # 下载完成后转换文档中的链接使其适合本地观看。
-p, --page-requisites # 下载所有必需的文件以正确显示给定HTML页。
```
##### 递归接收/拒绝
```
-np, --no-parent # 不向父目录的方向递归检索。
```
#### 示例
```bash
wget -r -p -np -k <url> # 批量下载url下的所有网页
```

View File

@ -1,6 +1,6 @@
#### 简介
创建新用户。
创建新用户,属于底层命令。一般用高层命令`adduser`即可
#### 语法

View File

@ -1,7 +1,13 @@
#### 简介
nohup的意思是"no hang up"在运行命令的时候忽略hangup信号。
```
nohup <command> [args] # 运行command忽略hangup信号
# 当用户注销或远程连接断开时终端会收到hangup信号从而关闭其所有子进程
# 一般会在最后加'&'把命令放后台执行
# 标准输出和标准错误会默认重定向到nohup.out的文件
# 标准输出和标准错误会默认重定向到当前目录的nohup.out的文件若无法输出到当前目录的nohup.out文件则输出到$HOME/nohup.out文件。
# 可以使用 > 把输出重定向到指定的文件。
# 可以使用 2>&1 把标准错误和标准输出都重定向到指定文件。
```