- 博客(336)
- 资源 (4)
- 收藏
- 关注
原创 线程的终止、连接与分离
资源有限性:在内存受限的嵌入式系统中,分离线程可以减少资源泄漏的风险,因为不需要记住去join每个线程。如果线程在pthread_detach()调用前就终止了,可能会变成僵尸线程。实时性要求:分离线程可以立即释放资源,避免因等待join而延迟其他任务的执行。在线程中调用 exit() 会终止整个进程,这是非常危险的操作,通常应避免。pthread_self()获取当前执行线程的唯一标识符(线程 ID)调用后会阻塞,直到目标线程终止;若线程已终止,立即返回。除非需要获取线程的返回值,否则优先使用分离线程。
2026-01-04 23:34:17
440
原创 线程的并发与并行
栈区存储内容:局部变量(非static)函数参数返回地址函数的调用上下文特点:自动管理:函数调用时分配,返回时释放后进先出(LIFO)结构空间有限(通常几MB)函数运行时确实在栈区:每个函数调用都会创建一个栈帧堆区存储内容:malloc()、calloc()、realloc()动态分配的内存new操作符分配的内存(C++)特点:手动管理:需要显式分配和释放空间大(受系统物理内存和虚拟内存限制)分配速度相对栈较慢容易产生内存泄漏和碎片
2026-01-04 11:05:38
359
原创 孤儿进程与守护进程
init实际执行的就是systemd,因此被systemd的进程收养的孤儿进程,相当于被 init收养了。早期Linux是由init进程直接管理它,Ubuntu并不是由 init进程 接管的。的调用总会成功,并返回进程的前一umask。而是由一个systemd接管的。
2025-12-30 11:25:46
424
原创 (子)进程管理
父进程还没执行完毕,子进程提前退出了,这种情况下会进入僵尸态。僵尸态会释放绝大部分资源,但在内核会保留一条用于让父进程 wait() 的记录。0,等待进程ID为pid的特定子进程。等待I/O、sleep、wait。无法停止后台运行的程序。0是结束的子进程PID。磁盘I/O、硬件操作。可能很长(依赖硬件)
2025-12-29 17:29:54
575
原创 进程的创建与终止
异常(abnormal)终止,例如段错误。正常(normally)终止,调用_exit()特性exit()_exit()头文件stdlib.hunistd.h标准ISO CPOSIX缓冲区刷新所有I/O缓冲区不刷新缓冲区atexit()会调用注册的函数不会调用临时文件会删除tmpfile()创建的文件不会删除推荐使用主进程、正常退出子进程、异常退出。
2025-12-29 13:24:45
573
原创 静态库与动态库
在链接阶段,如果一个符号被引用但未在链接的任何对象文件中定义,那么该符号会被标记为U。这通常意味着该符号是在其他库中定义的,或者在链接时需要通过某种方式(如链接器脚本或命令行参数)来指定其定义位置。在ELF(Executable and Linkable Format)格式的对象文件中,T通常意味着该符号是一个函数或变量,它在目标文件中定义(即它是可执行文件的一部分)在Linux中,nm 命令用于显示二进制文件(如可执行文件或库)的符号表。当看到结果中出现T和U这样的字符时,它们代表了不同类型的符号。
2025-12-28 21:25:08
988
原创 获取文件的属性
由于性能和简单性考虑,stat结构中的不同字段可能包含来自执行系统调用期间的不同时刻的状态信息。例如,如果通过调用st_mode或st_uid时,其他进程调用chmod (2)或chown (2)被更改,stat()可能会与新st_uid一起返回旧st_mode,或返回旧st_uid和新st_mode。如果path是符号链接,则stat获取的是目标文件的属性,而lstat获取的是链接文件的属性。第二种是使用提供的宏来判断文件类型。
2025-12-27 23:17:36
558
原创 目录的读取与访问
DIR是用来描述一个打开的目录文件的结构体类型,typedef重命名而来的类型名。struct dirent 和 DIR 是两个不同的结构体。
2025-12-27 22:41:24
305
原创 标准IO之文件的刷新与定位
rewind(fp) 相当于 fseek(fp,0,SEEK_SET);文件的打开使用a模式 fseek无效。以上三个函数只适用2G以下的文件。
2025-12-27 22:04:41
368
原创 标准IO之文件读写
gets()从stdin读取一行到s所指向的缓冲区,直到一个结束换行符或EOF,它用空字节(‘\0’)替换。因为在事先不知道数据的情况下不可能知道gets()将读取多少字符,并且因为gets()将继续存储超过缓冲区末尾的字符,所以使用它是非常危险的。遇到这种错误:Bad file descriptor, 很可能是文件打开的模式错误(只读模式去写,只写模式去读),或文件的读写权限不能满足文件打开设置的需求。文件写完后,文件指针指向文件末尾,如果这时候去读,读不出来内容的。
2025-12-27 00:00:10
821
原创 标准IO之文件打开与关闭
errno 全局变量,由系统生成,记录最近一次系统调用的错误码。perror先输出字符串s,再输出错误号对应的错误信息。strerror根据错误号返回对应的错误信息。不会自动使用当前errno,需要显式传入。
2025-12-25 23:47:03
592
原创 标准IO之流与缓冲
标准IO是C函数库的常见IO操作接口(对操作系统提供的系统调用进行封装,进一步降低与硬件的耦合),提供了缓冲机制,减少触发系统调用次数,实现了更高的效率。
2025-12-25 18:38:39
800
原创 非线性结构之树及二叉树
树的逻辑结构 :树中任何节点都可以有零个或多个直接后继节点(子节点),但至多只有一个直接前趋节点(父节点),根节点没有前趋节点,叶节点没有后继节点。结点F,G为堂兄弟结点A是结点F,G的祖先。i+1≤n时,有右孩子,其编号为2。结点A的层次:1结点M的层次:4。i≤n时,有左孩子,其编号为2。
2025-12-17 10:45:00
1607
原创 线性表之单链表
将线性表L=(a0,a1,……,an-1)中各元素分布在存储器的不同存储块,称为结点,通过地址或指针建立元素之间的联系结点的data域存放数据元素ai,而next域是一个指针,指向ai的直接后继ai+1所在的结点设p指向链表中结点ai
2025-12-12 15:25:01
816
原创 shell脚本入门
COUNT=1Z=helloecho $Zunset Zecho $Z$0 与键入的命令行一样,脚本文件名$1,$2,……$9 ${10} 分别包含第一个到第十个命令行参数$# 命令行参数的个数$@ 命令行所有参数:“$1,$2,……$9”每个参数可独立处理,适合逐个遍历$* 命令行所有参数,:“$1,$2,……$9”是一个整体,通常用于拼接前一个命令的执行状态,执行成功,返回0,否则返回非0$$ 当前进程的pid进程号。
2025-12-04 23:38:27
879
原创 文件管理相关命令
查到文件后执行命令,{}表示命令的参数即为所找到的文件;命令用于在指定目录下递归搜索文件或目录,支持通过多种条件筛选结果,并执行特定操作。文件/目录:支持多个文件或目录的递归搜索(需 -r 选)除了显示符合范本样式的那一列之外,并显示该行之后的内容。除了显示符合样式的那一行之外,并显示该行之前后的内容。除了显示符合样式的那一行之外,并显示该行之前的内容。在显示符合样式的那一行之前,标示出该行的列数编号。查找类型为 x 的文件(bcd-lsp)需高压缩率的场景(如备份)原生支持(tar命令)
2025-12-04 16:08:35
601
原创 shell及基本命令
英文单词shell可直译为“贝壳”。“贝壳”是动物作为外在保护的一种工具Linux中的shell就是Linux内核的一个外层保护工具,并负责完成用户与内核之间的交互。
2025-12-02 23:35:39
343
原创 Makefile入门
Makefile 文件描述了整个工程的编译、链接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件自动化编译:一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率提升编译效率:再次编译,只编译修改的文件x = a变量在声明时需要给予初值x或(x)或x或{x} 取值如果要使用真实的 $ 字符,那么需要用 $$ 来表示符号作用。
2025-11-29 23:12:40
984
原创 编译过程及条件编译
GCC 原名为 GNU C 语言编译器(GNU C Compiler),只能处理 C 语言。但其很快扩展,变得可处理 C++,后来又扩展为能够支持更多编程语言,如 Fortran、Pascal、Objective -C、Java、Ada、Go 以及各类处理器架构上的汇编语言等,所以改名 GNU 编译器套件(GNU Compiler Collection)GCC(特别是其中的 C 语言编译器)也常被认为是跨平台编译器的事实标准。
2025-11-26 23:27:00
426
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1