pipe系统调用及示例

我们继续学习 Linux 系统编程中的重要函数。这次我们介绍 pipe 函数,它是实现进程间通信 (IPC - Inter-Process Communication) 的基础机制之一,尤其适用于具有亲缘关系的进程(如父子进程、兄弟进程)之间进行单向数据传输。 1. 函数介绍 pipe 是一个 Linux 系统调用,用于创建一个匿名管道 (anonymous pipe)。管道是一种半双工(单向)的通信通道,具有固定的读端和写端。 你可以把管道想象成一个单向的水管或传送带: * 一端是写入端 (write end):数据被“放入”管道。 * 另一端是读取端 (read

Read More

Python二进制文件编码探测工具

Python二进制文件编码探测工具 背景实现基于python语言cchardet库的二进制文件分析程序,按照预设分段参数对文件进行读取和cchardet的文本编码探测。脚本具备跳过文件头n字节,按照m字节分段二进制文件及分段后数据连续4字节探测功能。结果输出会展示每段的序号,偏移起始,片内置信度识别偏移字节,片大小,编码方式,置信度,高置信度提示信息字段; 如何使用脚本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 1. 基本用法:分析整个文件 python encoding_detector.py myfile.bin # 2.

Read More

seccomp系统调用及示例

1. 函数介绍 seccomp 是Linux系统调用过滤机制,用于限制进程可以执行的系统调用。它通过Berkeley Packet Filter (BPF) 程序来定义哪些系统调用是允许的,哪些是禁止的。seccomp 是构建沙箱环境、提高应用程序安全性的重要工具,可以有效防止恶意代码执行危险的系统调用。 2. 函数原型 1 2 3 4 5 6 7 8 9 10 #include #include #include #include int prctl(int

Read More

kcmp系统调用及示例

kcmp 函数详解 1. 函数介绍 kcmp 是 Linux 系统中用于比较两个进程的内核资源的系统调用。可以把 kcmp 想象成”内核级别的资源比较器”——它能够检查两个进程是否共享相同的内核资源(如文件描述符、虚拟内存区域等),就像比较两个人是否使用相同的银行账户或信用卡一样。 在容器化和虚拟化环境中,kcmp 非常有用,因为它可以帮助确定两个进程是否属于同一个容器或命名空间,或者它们之间是否存在资源共享关系。。 2. 函数原型 1 2 3 4 5 6 #include #include #include Read More

kexec_load系统调用及示例

kexec_load - 加载新的内核镜像用于快速重启 1. 函数介绍 kexec_load 是一个 Linux 系统调用,用于加载新的内核镜像到内存中,以便通过 kexec 机制进行快速内核切换。kexec 是一种允许在不经过 BIOS/UEFI 初始化过程的情况下直接启动新内核的技术,大大减少了系统重启时间。 2. 函数原型 1 2 3 4 5 #include long kexec_load(unsigned long entry, unsigned long nr_segments, struct kexec_s

Read More

keyctl - 密钥管理控制接口

keyctl - 密钥管理控制接口 1. 函数介绍 keyctl 是一个 Linux 系统调用,用于管理和操作内核密钥保留服务(Key Retention Service)。它提供了对内核密钥管理子系统的完整控制接口,允许进程创建、检索、更新和删除各种类型的密钥。 密钥保留服务是 Linux 内核的安全基础设施组件,用于安全地存储和管理密钥、密码、证书等敏感信息。 2. 函数原型 1 2 3 4 5 #include #include long keyctl(int cmd, ...); 注意:这不是标准 C 库函数,需要

Read More

kill系统调用及示例

kill - 发送信号给进程 函数介绍 kill系统调用用于向指定的进程发送信号。信号是Linux系统中进程间通信的一种方式,用于通知进程发生了某种事件。通过kill可以控制其他进程的行为,如终止、暂停、继续等。 函数原型 1 2 3 4 5 #include #include int kill(pid_t pid, int sig); 功能 向指定进程发送信号,用于进程控制和通信。 参数 pid_t pid: 目标进程ID * 0: 发送给指定进程ID * = 0: 发送给当前进程组的所有进程

Read More

listen系统调用及示例

继续学习 Linux 系统编程中的重要函数。这次我们介绍 listen 函数,它是 TCP 服务器模型中不可或缺的一环,用于将一个已绑定的套接字置于监听状态,准备接收来自客户端的连接请求。 1. 函数介绍 listen 是一个 Linux 系统调用,专门用于 TCP 服务器。它的核心作用是将一个已经绑定到本地地址(通过 bind)的套接字的状态从默认的主动打开(active open)转变为被动打开(passive open)。 简单来说,listen 告诉操作系统内核: “嘿,内核,我这个套接字(sockfd)已经绑定了一个地址(IP 和端口),现在我想开始监听这个地址,等待客户端的连

Read More

open_by_handle_at系统调用及示例

open_by_handle_at 函数详解 1. 函数介绍 open_by_handle_at 是 Linux 系统中用于通过文件句柄打开文件的系统调用。可以把文件句柄想象成”文件的身份证号码”,而 open_by_handle_at 就是通过这个”身份证号码”来访问文件的工具。 与传统的通过路径名打开文件不同,open_by_handle_at 不依赖于文件路径,即使文件被移动、重命名或删除后恢复,只要文件系统支持,仍然可以通过句柄访问文件。这就像你通过身份证号码在任何地方都能找到一个人一样。 2. 函数原型 1 2 3 4 5 #define _GNU_SOURCE #i

Read More

openat系统调用及示例

openat - 相对于目录文件描述符打开文件 1. 函数介绍 openat 是一个 Linux 系统调用,用于相对于指定目录文件描述符打开文件。它是 open 函数的扩展版本,提供了更灵活的文件打开方式,支持相对路径操作,避免了某些竞态条件。 2. 函数原型 1 2 3 4 5 #include int openat(int dirfd, const char *pathname, int flags); int openat(int dirfd, const char *pathname, int flags, mode_t mode); 3. 功能 相

Read More