- 博客(40)
- 收藏
- 关注
原创 Framebuffer(帧缓冲)
Framebuffer(帧缓冲)是Linux系统中为显示设备提供的一套应用程序接口,它将显存抽象为一种设备,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。原理:通过内存映射技术向显存空间中写入rgb颜色值;
2024-09-10 19:58:14
825
原创 数据结构--------哈希表
哈希表(Hash Table),也称为散列表,是一种特殊的数据结构,它允许通过关键码值(key-value)进行快速查找、插入和删除操作。
2024-09-09 17:46:18
534
原创 数据结构-----栈 、队列
数据结构中的栈系统栈定义与特性特殊的线性表,只允许在栈顶进行插入和删除操作存储函数调用相关信息的内存区域,遵循后进先出原则实现方式数组或链表实现操作系统或编译器自动创建和管理应用场景算法实现,如函数调用、表达式求值等函数调用的管理,包括参数传递、局部变量存储等内存管理程序员自行管理(如数组大小限制、扩容等)操作系统或编译器自动管理元素类型存储的是数据元素(如整数、字符等)存储的是程序的执行状态(如函数调用信息、局部变量等)
2024-09-06 20:12:07
1039
原创 数据结构---->内核链表
内核链表是一种线性数据结构,其中每个节点包含了数据元素本身以及指向下一个节点的指针。在Linux内核中,这种链表通常被实现为双向链表或循环链表,以支持更高效的插入、删除和遍历操作。
2024-09-05 20:00:36
1879
原创 TCP/UCP
Loop本地回环定义:Loop本地回环通常指的是以127开头的IP地址段(127.0.0.1 – 127.255.255.254),其中127.0.0.1是最常用的地址,被称为本地回环地址(Loop back address)。 特点:不属于任何有类别地址类,代表设备的本地虚拟接口,默认被看作是不会宕掉的接口。 主要作用: 测试本机的网络配置:通过ping 127.0.0.1检查本机网卡和IP协议安装是否正常。 应用程序的资源调用:在SERVER/CLIENT程序中,当在同一台机器上运行且没有
2024-08-23 20:33:23
752
原创 网络 TCP UDP
addr 远程目标主机的地址信息。参数:sockfd 本地socket创建的套接子id。addrlen: 参数2的长度。功能:该函数固定有客户端使用,表示从当前主机向目标。
2024-08-22 20:51:11
758
原创 管道 信号
有名管道是Linux系统中一种特殊的文件类型,它允许不相关的进程之间进行通信。有名管道在文件系统中具有具体的路径和名称,因此可以被多个进程共同访问。信号是Linux系统中一种进程间通信机制,用于通知进程某些事件的发生。函数用于设置或获取进程中特定信号的处理函数。
2024-08-18 21:29:25
413
原创 无名管道
道缓冲区的典型大小,实际大小可能因系统而异。管道的大小是有限制的,当管道满时,写操作会。:虽然您提到管道大小为65536字节(即64KB),但需要注意的是,这个大小是管。阻塞,直到有足够的空间写入新数据。
2024-08-16 21:52:04
897
原创 线程 进程的优缺点 互斥锁
互斥锁的工作原理基于互斥(mutual exclusion)的原则,确保在任何给定时间,只有一个线程可以访问特定的代码段或资源,这段被保护的代码或资源通常被称为临界区。:当线程完成对共享资源的操作后,它必须释放互斥锁,以便其他等待的线程可以进入临界区。死锁:在使用互斥锁时,要特别注意避免死锁的情况,即两个或多个线程互相等待对方释放锁。锁的顺序:在多个锁的场景下,需要保证所有线程都以相同的顺序获取锁,以避免死锁。:一旦线程成功获取了互斥锁,它就可以安全地进入临界区,执行对共享资源的操作。
2024-08-15 21:26:20
1963
1
原创 学习笔记第二十五天
wait函数用于等待子进程结束,并回收子进程的资源。它会阻塞父进程的执行,直到它的某个子进程结束。:指向整数的指针,用于存储子进程的退出状态。如果不需要这个信息,可以传递NULL。返回值:成功时,返回被收集的子进程的进程 ID(PID)。如果调用进程没有子进程,调用会失败,此时wait返回-1,并设置errno为ECHILD。
2024-08-14 18:46:14
849
原创 学习笔记第二十四天
若,fork之后打开文件,父子进程操作同一个文件,但是,因为各自拥有自己的 "文件表项",2.各自拥有自己的相关的程序的各个段 数据段,所以,各自之间对数据的改变,不会相互影响。3)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数。若,fork之前打开文件,父子进程操作同一个文件,相互间有影响。c库函数,会执行io库的清理工作,关闭所有 的流,以及所有打开的文件。所以,各自按照自己的逻辑改变文件。函数没有返回值,因为一旦调用,程序就会终止。是一个系统调用,用于立即终止当前进程,但与。
2024-08-13 20:35:31
1002
原创 学习笔记第二十三天
进程(Process):是动态的,是程序在内存中的一次执行过程,当程序被加载到内存并由。创建进程时,系统会为进程分配必要的资源,包括内存空间、文件描述符等,并设置进程的。进程退出后,根据其父进程的状态,可能会成为孤儿进程(父进程已退出)或僵尸进程(父。隔离性:进程之间相对独立,一个进程的崩溃不会影响其他进程的运行,提高了系统的稳定。程序(Program):是静态的,它是一组指令的集合,这些指令被存储硬盘上,,程序本身。孤儿进程会被系统自动分配给init进程(PID为1的进程)作为其父进程。
2024-08-12 19:56:27
866
原创 学习笔记第二十天
应用场景:主要用于与终端(terminal)的交互,如stdout(标准输出)通常就是行缓冲的。缓冲区大小:通常不是固定的,但可以通过系统或库函数设置。刷新条件:遇到换行符(\n)时刷新。缓冲区满时刷新(尽管对于行缓冲来说,这个条件通常不会触发,因为换行符会提前触发刷新)。程序正常或异常结束时刷新。显式调用刷新。
2024-08-06 20:06:14
790
原创 学习笔记第十九天
标准输入(stdin):默认是指键盘输入。标准输出(stdout):默认是指显示器输出。标准错误(stderr):用于输出错误信息,也是指向显示器,但与stdout不同,stderr通常是无缓冲的,以确保错误信息能立即显示。
2024-08-05 20:06:18
1221
1
原创 学习笔记第十八天
1.注释:以符号开始,直到行末,用于解释代码或暂时禁用某行代码。2.命令:如echols等,用于执行系统命令或调用外部程序。3.控制结构:包括if语句、for循环、while循环等,用于控制脚本的流程。
2024-08-04 22:04:56
693
原创 学习笔记第十七天
内存共享:共用体的所有成员共享同一块内存空间。这意味着在同一时刻,共用体中只能存储一个成员的值,其他成员的值将被覆盖。大小由最大成员决定:共用体的大小由其成员中占用内存最大的成员决定,以确保能够存储任何成员的值。类型灵活:共用体允许在相同的内存位置存储不同类型的数据,从而提供了数据类型的灵活性。定义:枚举类型是一种用户定义的类型,它包含一组命名的整数常量。定义:共用体是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。有限集合:枚举类型的变量只能取该枚举类型中定义的值,这限制了变量的取值范围.
2024-08-02 20:14:21
1828
原创 学习笔记第十六天
4、用预处理命令#pragma pack(n) 可以强制编译器按照指定的n来对齐,合法的n的数值分别是1、2、4、8、16。2、结构体成员按照结构体成员声明先后次序依次存放,并且每个成员的首字节放置的位置必。其中,结构体名是用户自定义的标识符,用于标识这个结构体类型;3、如果结构体某个成员的字节数大于CPU的字节数,则最长按照CPU的字节数对齐;1、结构体按照其最长成员大小对齐,意味着最终的大小必须是最长成员大小的整数倍;含的一个或多个成员,每个成员可以是基本数据类型或另一个结构体类型。
2024-08-01 18:21:05
1144
原创 学习笔记第十四天
定义:在C语言中,字符型指针是一种特殊的指针类型,用于存储字符数据的地址动态内存分配是在程序运行时根据需要请求分配内存空间的过程。它允许程序在需要时动态地增加或减少内存使用量,提高了程序的灵活性和效率。
2024-07-30 23:27:06
587
原创 学习笔记第十三天
定义:指针是一种特殊的变量,用于存储内存地址。声明:类型 *指针名;例如,int *p;声明了一个指向整型的指针。赋值:指针可以通过取地址符&与变量关联,如 p = &a;(假设a是一个整型变量)。直接访问: i= 100;间接访问:int i =10;int *p;p = &i;*p = 100;用途:再被调函数中修改主调;
2024-07-29 18:30:21
364
原创 学习笔记第十二天
局部作用域:写在{}内,生效范围仅在{}内;全局作用域:不在{}内,生效范围从定义的哪行到文件结束;1.标识符必须先定义再使用。2.在同一作用域中不得定义同名标识符。3.在没有包含关系作用域中定义同名标识符互不影响。4.在两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见。
2024-07-28 17:49:55
604
原创 学习笔记第十一天
在C语言中,数组名作为函数参数时,实际上传递的是数组首元素的地址。这意味着在函数内部,我们可以通过指针来操作数组。数组可以在被调函数修改主调函数的内容。
2024-07-26 20:14:28
621
原创 学习笔记第十天
函数定义的一般形式为:返回类型 函数名(参数类型 参数名, ...)// 函数体return 表达式;如果函数没有返回值,则返回类型写为void,并且return语句可以省略或仅写为return;。
2024-07-25 19:38:39
768
原创 学习笔记第九天
二维数组是一种特殊的一维数组,其元素本身又是一维数组。定义形式:类型说明符 数组名[常量表达式1][常量表达式2];其中,常量表达式1 表示行数,常量表达式2 表示列数。
2024-07-24 19:21:15
719
原创 学习笔记第八天
定义:char arr[size];定义了一个能够存储size个字符的数组。直接初始化:char arr[] = "Hello";编译器自动在数组末尾添加'\0'。逐个字符初始化:char arr[6] = {'H', 'e', 'l', 'l', 'o', '\0'};明确指定每个字符,包括结尾的'\0'。注意:'\0'(空字符)是字符串的结束标志。
2024-07-23 20:02:35
639
原创 学习笔记第一天
Linux操作指令ls:列出目录内容cd:更改当前工作目录mv:移动和重命名文件和目录cp:复制文件和目录rm:移除文件和目录pwd:查看文件路径mkdir:创建目录touch:创建文件 vi:启动文件gcc:编译 ()yyp:复制 ()ddp:剪切c语言基础 常量
2024-07-15 18:40:40
380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人