Zig 使用下来的一些感想

2023-08-04,Zig 终于 release 了 0.11 的正式版本,这个版本距离 0.10 已经过了半年。但是鉴于目前用 Zig 的大多数项目都是直接使用 Nightly 的,也就没感觉到什么大的差别。本文写于 2023-07,大部分代码都是在 Zig 0.11 下的,所以看的时候注意一下时效性 »

udev 规则

今天滚了一下系统版本后发现自己的键盘控制器挂了,本来以为是 X 更新了,结果是 systemd 的原因。如果 systemd 从 253.7-1 升级到 254-1 后,那么需要检查一下自己的 udev 规则 配置文件路径 /etc/udev/rules.d/input.rules # KERNEL= »

锁匠的自我修养

本文讲一下锁(Lock),主要围绕互斥锁 (Mutex)。使用互斥锁是为了安全地访问临界区域 (critical section)。临界区域指的是一块对公共资源进行访问/修改的程序片段。这个是来自 WiKi 的定义,但是这种定义太模糊了,在这篇文章中我们会从头来理解这一起。不过,在一切开始之前我们先说明一下实验环境 环境/术语约定 本文所有的代码的实验环境如下 CPU: AMD Ryzen 7 5800H gcc (GCC) »

如何在 README 显示正在听的音乐

以网易云音乐为例,效果如下 P.S. 如果上面是白色的,代表我没有在听歌,不过文章末尾我放了一个静态的可以参考 数据怎么获取 简单说一下几种思路: 网易云音乐 API,参考这个 Repo Binaryify/NeteaseCloudMusicApi,里面有一个 「获取用户播放记录」 的接口。此接口返回的并不是直接的一个播放历史,而是需要你根据数量过滤。你需要在两次请求间隔中 diff 一下,如果哪首歌播放次数增加了,那么就是最近在听的 如果你在用第三方客户端, »

理解 Linux 中的 splice(2) - 补充篇

接上文 理解 Linux 中的 splice(2),本篇来探讨一下 splice 的几个参数配置 SPLICE_F_MORE splice 系统调用的 flag 参数可以为一下几个的组合 SPLICE_F_MOVE :一个实际上没有被使用的参数 SPLICE_F_NONBLOCK :非阻塞,需要传入的文件描述符也为非阻塞模式才能生效 SPLICE_ »

理解 Linux 中的 splice(2)

引言 通常我们在进行网络编程的时候,数据的传输过程如下图所示 在一些场景下这个没什么问题的,但是在某些特殊场景下可以优化这个传输过程。比如 Socks5 Proxy 在 CONNECT 之后,会直接透明传输 Client 到 Server 的流量。这个情况下就没有比较将数据从 Socket Buffer 中复制到 User Process 了,因为我们不需要对流量进行任何修改。所以更好的方法是直接在 Kernel »

Differences between read and read_buf in Tokio

记录一下本周遇到的一个问题,下面是最小复现代码 use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, net::TcpStream, }; #[tokio::main] async fn main() -> std::io::Result<()> { let mut stream = TcpStream::connect( »