reboot命令的执行过程 reboot命令大家很熟,但是究竟是怎么reboot的,为何reboot会reboot出bug来。本文以busybox的reboot版本分析。 问题起源今天碰到一个问题,代码内reboot后系统有bug。命令行reboot后又没有问题。追溯代码发现二者的差异,代码内实际运行的reboot -f命令。多了一个-f参数。这参数的区别是什么呢? busybox内的reboot流程reboot命令处理 2025-04-16
sock_filter之bpf 在linux上,我们创建socket收包时,默认会把指定协议的所有数据包收上来。如指定的ETH_P_ALL,那么所有包都会收上来,如果指定IPPROTO_ICMPV6,那么只会收icmpv6的报文。有时我们想过滤部分数据包怎么办呢?使用setsockopt的SO_ATTACH_FILTER选项设置过滤器到内核。 SO_ATTACH_FILTER使用通过SO_ATTACH_FILTER选项,可以 2024-03-15 #技术/bpf
flock使用体会 简介它的API很简单,如下 123#include <sys/file.h>int flock(int fd, int operation); operation可指定: LOCK_SH:设置共享(读)锁 LOCK_EX:设置独占(写)锁 LOCK_UN:解锁 它是建议锁。需要所有使用该文件的人都遵循规矩先flock上锁再使用文件才有效。 它是一个系统调用,在内核fs/locks. 2023-12-29
linux命名空间简介 linux namespace提供了一种进程资源隔离的方法。是docker背后的技术原理。 简介 Mount Namespace - 挂载点隔离,一个空间的挂载卸载不影响另一个空间 UTS Namespace - 隔离nodename和domainname两个系统标识 IPC Namespace - 信号量,消息队列等IPC隔离 PID Namespace - pid 隔离 Network 2025-03-28
mininet模拟128个客户端 安装软件1234sudo apt install mininetsudo apt install openvswitch-testcontroller# 安装dhclient,新版ubuntu已经没有dhclient了sudo apt install isc-dhcp-client 基础命令使用先运行如下命令,创建一个两个主机连在一个交换机s1下的拓扑。 1sudo mn --topo sing 2025-03-25
initramfs启动 下面代码对应的内核版本:6.2 为何需要initrd,initramfs?早期的文件系统一般只保存在一两种存储设备上,内核只需要把这些存储设备的驱动编译进内核即可。后面存储设备越来越多,把所有存储设备的驱动都编译进内核不划算。编译为模块后,这些模块怎么加载呢?linux使用udev来实现模块的自动加载。但是udev是一个应用程序,根文件系统挂载前,无法执行应用程序。所以需要一个中间过度用的文件 2024-10-23
lsof使用&交叉编译 lsof是一个查看进程打开哪些文件的命令,平常使用ls -l /proc/pid/fd也能看。但不如lsof详细,它帮你解析了socket的连接信息等。不用自己去/proc/net/tcp等里面去找了 编译我当前的版本为github上最新版本,约为4.99.4。因为编译不过(rpc库链接找不到),我需要先做修改Configure,删除这几行,强制定义HASNORP 2025-03-20
调用tzset依然无法刷新时区问题 问题现象一个程序运行时,时区信息是固定的。当外部修改时区信息后,程序并不能知道,还是用的缓存的时区。这时程序的时间就是错误的。一般的解决办法是,进程内调用tzset函数,这可以刷新时区信息,使其得到正确的时间。 问题在于我在程序里面调用了tzset,时间还是没有刷新。 原因结论:c库代码有点问题。 tzset的glibc实现里面,会先获取环境变量TZ,如果和缓存的没有区别,那么就直接返回了。关键代 2025-01-09
python虚拟环境 在升级Ubuntu 24.04之后,python pip安装包就开始报错了(error: externally-managed-environment)。问题的原因在于ubuntu 24.04对python的环境进行了强制管控。不让用户随便搞了。 为什么需要虚拟环境解决项目依赖特定版本库的问题。比如项目A依赖库X的1.0版本,但是项目B又是根据X库的2.0版本开发的。两个版本的X库不兼容,项目 2024-11-13
popen后台执行进程问题 popen里面使用&后台进程问题 这个例子可以加深对linux下fork,文件等的理解 直接进入主题,如下代码 1234567891011121314151617181920#include <stdio.h>int main(int argc, char *argv[]){ char line[128]; FILE *fp = popen("ping 1 2022-09-07 #编程/c