自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 系统调用day05信号续以及day06管道

本文摘要: 主要介绍了Linux系统中的信号处理和进程间通信技术。第一部分讲解了信号集操作函数(如sigemptyset、sigaddset等)和信号阻塞集(sigprocmask函数)的使用方法,演示了如何控制信号的阻塞和解除阻塞。第二部分详细介绍了无名管道的概念和特性,包括管道的创建(pipe函数)、读写特点以及父子进程间的通信实现。通过多个代码案例展示了管道在进程间数据传输的应用,分析了管道缓冲区大小、读写阻塞行为以及异常情况处理。文章还涉及文件描述符复制(dup/dup2函数)的技术细节。

2025-09-08 19:31:34 1029

原创 系统编程day05-进程间通信-信号

本文介绍了Linux系统中的进程间通信机制,重点讲解了信号的概念、特点及其实现方式。信号是一种软件中断机制,用于进程间异步通信,编号1-31为标准信号,34-64为实时信号。文章详细阐述了信号的产生方式(终端按键、硬件异常、软件条件等)、处理方式(忽略、终止、自定义处理)以及信号集(未决信号集和阻塞信号集)的概念。此外,还介绍了常用的信号处理函数,包括kill、raise、abort、alarm、setitimer等系统调用,以及如何通过signal和sigaction函数为信号注册自定义处理函数。最后讲解

2025-09-06 09:47:18 1533

原创 系统编程day04 - 进程2

本文主要介绍了Linux系统编程中的进程管理相关函数和概念。主要内容包括: waitpid函数的使用方法,包括参数解析、选项设置和返回值处理。通过示例演示了非阻塞回收子进程的实现。 三种特殊进程: 僵尸进程:子进程终止但未被回收,会占用系统资源 孤儿进程:父进程终止后由init进程接管 守护进程:长期运行的后台服务进程 多进程创建和回收的实现方法,包括fork循环创建多个子进程,以及使用waitpid轮询回收多个子进程。 终端相关概念:进程组、会话组,以及创建新会话的setsid函数。 exec函数族的用法

2025-09-04 20:32:45 806

原创 系统编程day03-进程

本文摘要:文章系统介绍了进程管理的核心概念与技术。主要内容包括:1)进程与程序的区别,单道/多道程序特点;2)进程状态(就绪/运行/等待)及查看方法;3)进程号(PID)管理及相关系统调用(getpid等);4)进程创建(fork函数)及父子进程关系;5)进程资源回收机制(wait/waitpid函数)。重点解析了进程控制块、并发/并行、进程状态转换等关键概念,并提供了详细的函数原型和代码示例。全文从理论到实践全面阐述了Linux环境下的进程管理机制。

2025-09-03 21:00:08 816

原创 系统编程day2-系统调用

本文概述了系统编程和系统调用的基本概念。系统编程是在操作系统下进行的编程,通过系统调用接口实现对硬件资源的访问。系统调用作为用户程序与内核的桥梁,提供了进程管理、内存管理等功能,涉及用户态和内核态的切换。重点介绍了文件描述符的概念,以及常用的系统调用函数如open、close、read、write等,说明了它们的功能、参数和返回值。这些系统调用提供了对文件的基本操作能力,是Linux系统编程的基础。

2025-09-03 20:00:27 984

原创 系统编程day1-shell

文章摘要:本文介绍了Shell编程的基础知识,包括Shell的概念、作用及分类(解释型语言与编译型语言的区别)。重点讲解了Shell脚本的执行方式、变量定义与操作(取值、清除、只读变量)、条件测试语句(文本、字符串、数值测试)以及流程控制结构(if、case、for、while等)。同时涵盖了函数定义与调用方法,并对比了不同括号()和{}的作用域差异。通过具体代码示例,帮助读者理解Shell脚本的语法特性和应用场景,为系统编程学习打下基础。全文约1500字,包含30余个代码片段。

2025-09-02 20:32:42 1190

原创 DAY13-文件操作

C语言文件操作主要通过FILE指针实现,包括fopen()、fclose()等函数。fopen()支持多种模式(r/w/a/r+/w+/a+)打开文本或二进制文件,其中'a'模式会在文件不存在时自动创建。写入操作使用fputc()、fputs()和fprintf()函数,分别用于写入字符、字符串和格式化数据;读取操作则使用fgetc()、fgets()和sscanf()函数,依次读取字符、字符串和格式化解析数据。文件操作完成后需用fclose()关闭以释放资源。示例演示了如何读写包含学生信息的结构体数据。

2025-08-27 21:19:50 530

原创 DAY12-链表

本文介绍了链表数据结构及其实现方式。首先对比了数组和链表的优缺点,指出链表在非连续空间存储数据的特性。文章详细讲解了链表的分类:按方向分为单向和双向链表;按头节点分为有头和无头链表。重点展示了四种链表实现:静态单向无头链表、静态双向无头链表、动态单向无头链表(含头插法和尾插法实现)以及动态双向有头链表。每种实现都配有代码示例和结构设计说明,特别对动态链表的节点插入操作进行了详细阐述。最后提出了基于双向有头链表的学生信息管理系统设计方案。

2025-08-27 21:03:21 498

原创 DAY11宏,条件编译

本文介绍了C语言中宏和条件编译的使用方法。宏分为无参数宏(如#define PI 3.14159)和带参数宏(如#define ADD(a,b) a+b),使用时需注意参数替换可能带来的运算优先级问题。条件编译包含三种形式:#ifdef判断标识符是否定义、#ifndef判断标识符是否未定义,以及#if根据条件真假执行不同代码块。这些功能在代码调试、平台适配等场景中非常实用。

2025-08-25 20:38:39 192

原创 常用内存操作函数文档说明

本文介绍了C语言中五种常用的内存操作函数: memchr:在内存块中搜索特定字符的首次出现位置,不因空字符终止,适用于二进制数据搜索。 memcmp:逐字节比较两个内存块的内容,返回差异结果,适用于结构体或二进制数据比较。 memcpy:高效复制内存块内容,但不处理内存重叠,需确保目标空间足够。 memmove:安全复制内存块,自动处理源与目标的重叠问题,适合移动数据或插入操作。 memset:按字节设置内存块的初始值,常用于清零或填充特定模式,效率高但需注意数据类型。

2025-08-25 20:26:03 1135

原创 常用字符串函数的函数文档说明

本文介绍了C语言中常用的字符串操作函数,分为四类:复制、拼接、比较和查找。 字符串复制 strcpy:完全复制源字符串到目标数组,不检查缓冲区长度,易溢出。 strncpy:限制复制的字符数,防止溢出,但需手动添加终止符\0。 字符串拼接 strcat:将源字符串追加到目标字符串末尾,不检查剩余空间。 strncat:安全拼接,限制追加字符数并自动添加\0。 字符串比较 strcmp:完全比较两个字符串,返回负、零或正值表示字典序关系。 strncmp:仅比较前n个字符,功能类似strcmp。 字符串查找

2025-08-25 19:09:24 1229

原创 DAY10.2结构体一点点拓展

探讨了C语言中结构体和共用体的内存分配机制。结构体采用内存对齐原则,总大小为最大成员类型的整数倍,成员顺序会影响内存占用(示例中结构体大小从44字节到56字节不等)。共用体则共享同一块内存,大小为最大成员所占空间,后赋值成员会覆盖之前数据(如32字节共用体示例)。此外,还介绍了枚举类型的基本用法,包括默认从0开始递增、自定义起始值和中途赋值等情况。这些特性对优化程序内存使用和提升代码可读性具有重要意义。

2025-08-25 17:11:57 287

原创 DAY10-结构体

本文系统介绍了C语言中结构体的概念与使用方法。主要内容包括:1)结构体的基本概念和声明方式(匿名和typedef两种);2)结构体变量的定义、初始化和访问方法;3)结构体指针的使用及动态内存分配(包括成员和整个结构体的动态分配);4)结构体数组的定义和操作;5)结构体指针数组在栈区和堆区的实现方式。文章通过具体代码示例详细演示了结构体在数据组织、内存管理等方面的应用,特别强调了指针操作和内存释放的顺序问题。

2025-08-23 09:54:23 528

原创 DAY09-指针补充与动态内存分配

文章主要讲解了C语言中的三个重要概念:1)数据存储的大小端模式区分,通过代码示例说明如何判断系统存储方式;2)二级指针的概念和使用方法,展示了如何通过二级指针访问数据;3)动态内存分配的三种函数(malloc/calloc/realloc)及其使用要点,包括内存初始化、释放和管理。文中提供了多个代码示例,帮助理解这些核心概念的实际应用,特别强调了动态内存分配的正确使用方法和注意事项。

2025-08-21 20:08:12 1131

原创 DAY08-指针与地址

本文介绍了计算机内存与指针的核心概念。首先区分了ROM(硬盘)和RAM(内存)的功能差异。重点讲解了内存地址的概念,说明指针变量如何存储地址并指向内存单元。文章详细解析了指针的基本操作(取地址、取值)和与数组的关系,包括数组名即首元素地址、地址运算规则等。特别说明了数组作为函数参数时的指针特性,以及字符串与字符数组的表示和遍历方法。最后通过字符串比较函数的实现,展示了指针在字符串处理中的应用。这些内容是理解计算机内存管理和指针操作的基础。

2025-08-20 20:50:06 917

原创 DAY07-数组及相关算法

本文介绍了C语言中数组的基本概念和使用方法。主要内容包括:1.数组是连续存储相同类型数据的构造类型,通过下标访问元素;2.数组定义格式和初始化方式;3.字符数组和字符串数组的区别;4.使用for循环遍历数组;5.数组作为函数参数的传递方式;6.重点讲解了冒泡排序和选择排序两种算法,通过示例代码演示排序过程,并优化了冒泡排序的循环次数。文章通过具体案例帮助理解数组操作及其应用场景。

2025-08-19 20:41:55 687

原创 DAY06-函数

若后续需要用到函数的返回值作为判断,我们就需要用返回值的函数类型。若结果只是需要输出等一些不需要参数返回值的场景,我们可以使用无返回值的函数类型。这里以有参数有返回值作为一个举例:函数需求:现在需要一个函数,用户提供两个int类型的数据,函数执行完,返回这两个数据中较大的那一个。需求分析:返回值类型:返回的是两个int中的一个,所以也是int类型函数名:GetMax形式参数:int num1 ,int num2。

2025-08-19 16:49:49 1155

原创 DAY04-运算符

问:已知rand()是一个1~100之间任意的一个以随机数,我们该如何操作可以得到60~100的随机数。rand()41可以取到0~40之间的任意数,加上60,我们就可以取到60~100之间的任意随机数。在for循环中,需要认清++或是--的逻辑,看是先带入还是先运算。逻辑或的两侧,只要一侧结果为真,则最后结果就为真。所谓运算,可以是一次输出,也可以是一次算数运算。,相与以后得结果才是真,否则为假。先完成一次自增操作,再带入运算。先带入运算,再完成一次自增操作。先完成一次自减操作,再带入运算。

2025-08-15 14:56:36 1089

原创 linux中vim的使用

vim是一款高度可定制、功能强大的文本编辑器。是Unix编辑器的vi增强版,以高效的操作和极低的资源占用著称,尤其适合编程、系统管理和文本处理。2.vim的安装想要使用vim的第一步就是要安装vim。在虚拟机中可以使用下面的命令进行下载安装vim,根据提示进行安装即可。

2025-08-14 14:12:13 837

原创 DAY03-基本数据类型

开发中不会改变的量。固定的量。

2025-08-13 20:03:53 598

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除