leon的博客
  • 首页
  • 归档
  • 关于

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
12345

搜索

人生苦短,远离bug
总访问量 次 总访客数 人