准备实习生招聘与秋招,想一想自己会啥,在lark上写了点总结。
译文:C 的宏
这篇译文印象中于2017年9月底10月初保研之后所写,最初发布在西电开源社区社区的wiki上面。
这是一篇来自 GNU GCC 关于预处理部分宏相关的文档的总结,原文参考底部Reference。
宏(macro)可以说是一种模式替换,它根据一系列预定义的规则替换一定的文本。有两种宏:对象式宏(Object-like macros),函数式宏(function-like macros)。前者使用的时候就像数据对象一样,后者类似函数调用。
宏的标识符可以是任何字符,甚至是C的关键字(这点比较有用,可以用它来隐藏C语言的关键字,比如const
关键字在老的编译器中并不支持,可以用此特性实现编译器之间的兼容。但一些预处理的操作符并不可以被定义成宏,参见这里,同样一些C++ Name Operators也不可以。
linux下的进程关系与pid namespace
linux下的访问控制之credentials
从ss-redir的实现到Linux NAT
引子
今年4月,在家的时候意外看到了ss-redir 透明代理,对其中的详细说明持有怀疑态度:
由于笔者才疏学浅,刚开始居然以为 TCP 透明代理和 UDP 透明代理是一样的,只要无脑 REDIRECT 到 ss-redir 监听端口就可以了。
…
但是,上面这种情况只针对 TCP;对于 UDP,如果你做了 DNAT,就无法再获取数据包的原目的地址和目的端口了。
我可以利用TUN/TAP设备写一个IP packet modifer吗?
Rust Module std::option 1.0.0
Module std::option
可选的值。
Option
类型代表了一种可选的值:每个Option
要么是包含了值的Some
类型,或者什么都不是的None
。Option
类型在Rust代码中很常见,有着大量的使用:
Rust Module std::ffi 1.0.0
Module std::ffi
与FFI绑定的有关utilities。
这个模块提供了一些utilities,用于帮助操作非Rust接口的数据,比如不同的编程语言或者操作系统底层接口。它主要用于FFI(Foreign Function Interface)bindings或代码中需要与其他类C语言的字符串进行数据交换的地方。
Rust介绍
rust version
Rust维护三个【发行频道(release channels)】:稳定版(stable),测试版(beta),开发版(nightly)。稳定版和测试版每六周更新一次,而在那时的开发版会变成新的测试版,测试版变为新的稳定版。标记为不稳定(unstable)或者隐藏在特性门控(feature gates)后的语言和标准库特性只能再开发版上使用,新特性最初会被标记为不稳定,一旦呗核心团队和相关的自团队批准的话就变成【通过门控的(ungated)】,这种方法允许实验性变更,并同时为稳定频道提供强有力的向后兼容保证。
并不能在测试或稳定频道上使用不稳定的功能。不稳定的特性意味着不能提供这种特性保证,不希望开发者依赖它。
在VMware Player中启用UEFI模式
背景
几周前用QEMU的时候,发现QEMU user manual上面有这么一行,有uefi
这一选项:
1 | -smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d][,uefi=on|off] |