主题修改记录
二零二五年 二月一日 Hexo 主题封面大改造:从失效链接到宫崎骏风 AI 图这篇主题修改的文章好多年不打开了(其实大部分博客都不怎么重新修正,反正是写给自己的),年久失修,许多封面图片链接失效,只剩破碎图标。为重塑博客风采,假借藏书之家,拜谢AI大人,统一更换封面(全用本地图片改起来还好,但终归让人头秃) 二零二二年 六月十一日 Hexo...
Linux:为什么用 dup 而不是直接赋值
导言在 C 语言的文件操作和输入输出重定向场景中,我们常常会遇到dup函数,而不是直接对文件描述符进行赋值操作,这背后有着深刻的原因,涉及到操作系统资源管理、文件描述符特性以及程序的健壮性等多个方面。 一、直接赋值与 dup 函数的本质差异1. 直接赋值的局限性在 C 语言中,文件描述符是一个非负整数,用于标识打开的文件。如果尝试对文件描述符进行直接赋值,例如int new_fd = old_fd;,这仅仅是进行了值的拷贝。此时new_fd和old_fd虽然数值相同,但它们相互独立,对其中一个文件描述符进行的操作(如关闭、读写)不会影响另一个。这种简单的赋值无法实现文件描述符的共享和关联,无法满足一些特定场景下对文件操作的需求 。 2. dup 函数的工作原理dup函数的原型为int dup(int...
Linux:输入输出与文件操作函数学习笔记整理
导言在 C 语言的编程世界里,输入输出以及文件操作是与外界交互、处理数据存储的重要环节。scanf、printf、open、fopen、read、fread、write、fwrite、fseek、lseek、mmap这些函数各司其职,共同构建起强大的数据处理体系。本文将详细介绍这些函数的功能、用法、示例,并进行对比分析。 一、标准输入输出函数:scanf 与 printf1. printf 函数及其变体printf函数是 C 标准输入输出库(stdio.h)中用于格式化输出的函数,其原型为int printf(const char *format, ...)。其中,format是格式控制字符串,包含普通文本和格式说明符;...表示可变参数列表。 123456789#include <stdio.h>int main() { int num = 10; float f = 3.14; char str[] = "Hello, World!"; ...
Linux:stat 与 fstat 函数学习笔记
一、函数概述在 UNIX 和 Linux 系统编程中,stat和fstat用于获取文件状态信息,如大小、权限、修改时间等,信息存于struct stat结构体。二者功能相似,但参数类型和使用场景不同,合理使用可提升文件操作效率。 二、函数原型与参数对比 函数 原型 参数说明 stat int stat(const char *pathname, struct stat *statbuf); pathname:文件路径;statbuf:存储信息的结构体指针 fstat int fstat(int fd, struct stat *statbuf); fd:已打开文件描述符;statbuf:存储信息的结构体指针 stat依赖文件路径,适用于文件未打开时;fstat基于文件描述符,需文件已打开。 三、返回值与结构体信息成功返回0,填充struct stat结构体;失败返回-1,设置errno。结构体常见字段包括设备 ID、inode 编号、权限等。 四、核心差异分析4.1 参数类型差异stat用路径名,如stat("example.txt",...
鸟哥的私房菜:基础文件系统管理学习笔记
一、认识 Linux 文件系统1.1 磁盘文件名与磁盘分区 物理特性:磁区(Sector)是最小物理存储单元,现代磁盘常见 512 字节与 4K 两种格式。多个磁区在物理上连续排列形成磁柱(Cylinder),磁盘读写以磁柱为单位进行寻址。例如,传统机械硬盘通过磁头沿磁柱移动实现数据读写,固态硬盘则通过闪存芯片的区块管理模拟类似机制。 分区表格式 MSDOS(MBR):磁盘首个磁区包含 446 字节的主要开机区(MBR Boot Code)和 64 字节的分区表。由于仅能记录 4 笔主分区信息,若需更多分区需通过扩展分区实现逻辑分区。其容量上限受限于 32 位地址空间,无法管理超过 2TB 的磁盘。 GPT:使用 34 个 LBA 区块记录分区信息,磁盘末尾 33 个 LBA 作为备份。支持创建 128 个以上分区,突破 2TB 容量限制,且每个分区记录可独立格式化。GPT 还引入 CRC 校验机制,提高分区表的可靠性。 磁盘文件名:实体磁盘文件名遵循 /dev/sd[a-p] 规则(如 /dev/sda 表示第一块 SCSI/SATA 磁盘),虚拟磁盘(如...
鸟哥的私房菜:权限应用、程序观察与基本管理学习笔记
导言 在 Linux 系统的理论研究与工程实践过程中,权限分配机制、程序运行监控及基础管理策略构成了系统安全与资源调度的核心理论体系。深入解析这些关键技术,不仅有助于构建稳固的系统安全防线,还能通过资源的精细化管理提升系统整体运行效能。以下将对这些核心内容展开系统性探讨。 一、权限在目录与文件系统中的作用机制 Linux 系统基于用户身份(所有者、所属组、其他用户)与权限类型(读r、写w、执行x)构建三维权限管理模型。不同文件类型(普通文件、目录文件)权限语义差异显著,影响资源访问与操作。 普通文件权限:读权限允许查看内容;写权限支持内容修改但不包括删除;执行权限赋予运行能力,但需文件内容有效。 目录文件权限:读权限可枚举文件名;写权限能修改目录结构;执行权限决定能否进入目录。 二、程序管理的理论与实践 在 Linux 系统运行中,程序从外部设备加载到内存后成为进程,对进程的监控与调度是系统管理关键。 1. 程序与进程的概念辨析 程序:静态存储于硬盘等介质的二进制文件,无运行时动态特征。 进程:程序执行时,系统将代码、数据及权限载入内存并分配...
Linux:基于 select 的即时聊天程序设计与实现
引言在网络编程的世界里,即时通信是一个核心话题。如何实现一个高效、稳定的聊天系统?本文将通过分析一个基于 select 的即时聊天程序 B 端代码,深入探讨 Unix/Linux 环境下的网络编程技术,包括命名管道、I/O 多路复用和非阻塞 I/O 等核心概念。 一、 整体架构设计 这个即时聊天程序采用客户端 - 客户端 (C2C) 架构,通过命名管道实现两个客户端之间的双向通信。系统结构简洁明了,如下图所示: 12345678+----------------+ +----------------+| 客户端A进程 | | 客户端B进程 || | | || 写入1.pipe |--------------> | 读取1.pipe || | | || 读取2.pipe ...
鸟哥的私房菜:Linux 基础文件权限与基础账号管理读书笔记
在学习 Linux 系统的过程中,文件权限与账号管理是极为重要的基础内容,这部分知识对于理解系统安全机制、实现资源合理分配与管理有着关键作用。下面对“Linux基础文件权限与基础账号管理” 课程内容进行梳理总结。 一、课程整体框架 课程围绕 RockyLinux 9.x 展开 Linux 基础训练,涵盖初次使用、指令列模式、文件管理、vim 使用等多方面内容。本次重点学习的第四课,聚焦于 Linux 基础文件权限与基础账号管理,后续课程还将深入权限应用、程序管理、文件系统管理等进阶内容,形成完整的学习体系。 二、Linux 传统权限 1.权限概念与身份划分Linux 权限旨在保护文件资料,其设置基于用户、群组、其他人三种身份。用户即文件所有者;群组是文件所属的团队;其他人则是不属于用户且未加入群组的账号。以学校借书为例,小老师为使用者,本班同学为群组,隔壁班同学为其他人,清晰展现了不同身份在文件管理中的权限差异。 2.文件权限观察查看指令:使用ls -l或ll可查看文件权限,如ls -ld...
鸟哥的私房菜:Linux文件管理与Vim编辑器进阶教程
一、批量文件创建技术与花括号扩展应用 1.1 多维度参数组合文件创建在 Linux 中,利用花括号{}的扩展功能可高效创建具有规律命名的文件。以在/dev/shm/testing目录下创建 36 个名为mytest_XX_YY_ZZ的文件为例,其中XX为jan,feb,mar,apr,YY为one,two,three,ZZ为a1,b1,c1,可通过以下命令实现: 12mkdir -p /dev/shm/testingtouch /dev/shm/testing/mytest_{jan,feb,mar,apr}_{one,two,three}_{a1,b1,c1} 原理解析:花括号内的参数会被展开为所有可能的组合,等价于执行 3×3×4=36 次touch操作。mkdir -p用于确保目录存在,避免因路径不存在导致错误。 1.2 序列数字文件批量生成若需创建4XXXC001到4XXXC050的 50 个文件,可结合{}与序列生成语法: 12mkdir -p...
鸟哥的私房菜:指令下达行为与基础档案管理
一、date 指令相关操作 显示 “小时:分钟” 格式:执行指令date +%H:%M,即可按照 “小时:分钟” 的格式输出当前时间,如 “15:20” 。其中%H表示 24 小时制的小时数,%M表示分钟数。 date +%s****输出信息:该指令输出的是从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的秒数,也被称为 Unix 时间戳。它常用于时间相关的计算和记录,在编程和系统管理中应用广泛 。 显示两天前的+%Y/%m/%d****格式日期:使用指令date -d "2 days ago" +%Y/%m/%d,-d选项用于指定日期字符串,“2 days ago” 表示两天前,后面的+%Y/%m/%d用于指定输出格式,以 “年 / 月 / 日” 的形式展示日期。 显示 “西元年 - 日 - 月 小时:分钟” 格式:执行指令date +%Y-%d-%m...