- 博客(25)
- 收藏
- 关注
原创 C++ 智能指针:unique_ptr、shared_ptr 和 weak_ptr
特性unique_ptrshared_ptrweak_ptr所有权独占共享弱引用(不拥有)拷贝禁止允许允许引用计数无有不增加引用计数搭配工厂函数与shared_ptr配合典型应用场景单独资源管理多个对象共享资源避免循环引用、观察对象。
2025-07-23 14:29:59
858
原创 多线程编程:pthread_create、pthread_join 及线程终止
retval:线程的返回值(即线程函数的 return 或 pthread_exit 的值),可以为 NULL 表示忽略。可以在任意地方主动结束线程并返回值,返回值可以通过 pthread_join 接收。start_routine:线程入口函数,必须是 void* (thread:线程 ID,输出参数,创建成功后会赋值。成功返回 0,失败返回错误号(非 errno 形式)。attr:线程属性,一般填 NULL 使用默认属性。thread:要等待的线程 ID。arg:传递给线程函数的参数。
2025-07-04 10:23:07
449
原创 Linux中信号的三种产生方式
方式说明适用场景kill命令通过命令行发送信号终端手动管理进程键盘信号快捷键控制前台进程交互中断、终止系统调用程序内部控制信号行为异常处理、调试。
2025-06-24 10:46:47
534
原创 Linux 中的信号处理方式详解
可以通过 signal() 或 sigaction() 函数,指定一个函数来处理信号,实现自定义逻辑。printf("收到SIGINT信号,进行自定义处理!\n");// 自定义处理SIGINT信号printf("进程PID: %d\n", getpid());sleep(1);return 0;收到SIGINT信号,进行自定义处理!信号处理方式调用方法特点默认动作不做处理或设置为SIG_DFL系统根据信号类型执行默认操作忽略信号信号被丢弃,不作任何处理自定义处理signal()
2025-06-24 09:51:30
585
原创 SysV实现进程间通信:共享内存创建、挂接、通信与删除(含服务端/客户端示例)
共享内存是一种高效的进程间通信方式,但使用时要注意同步控制与资源清理问题。本文通过服务端和客户端代码完整演示了其获取、挂接、通信与删除的全过程,适合入门学习使用 SysV 共享内存。
2025-06-03 11:36:42
1002
原创 使用有名管道(FIFO)实现循环通信的客户端-服务端
管道本质是一个特殊文件;打开时如果只有读端或写端会阻塞,直到另一端就绪;用 mkfifo() 创建;与普通文件不同,read()/write() 会阻塞,直到对方准备好。
2025-05-29 11:23:50
525
原创 Linux进程通信之管道机制全面解析
管道(Pipe)通信是通过内核提供的一段缓冲区实现的数据通道,一个进程可以将数据写入管道,另一个进程从管道中读取数据,实现数据的传输。管道是半双工的,即数据只能沿一个方向流动,如果需要双向通信,需要建立两个管道。管道是一种进程间通信(IPC)机制,用于在进程之间传递数据。它通过内核缓冲区实现数据的单向流动。特性无名管道有名管道(FIFO)是否具文件名否是(路径)使用函数pipe()mkfifo()open()是否跨进程关系否(需要亲缘关系)是使用难度较低稍高使用场景父子进程通信。
2025-05-25 22:09:22
1293
原创 论文阅读分享:DSTIGCN_Deformable_Spatial-Temporal_Interaction_Graph_Convolution_Network_for_Pedestrian_Traj
摘要:论文《DSTIGCN: Deformable Spatial-Temporal Interaction Graph Convolution Network for Pedestrian Trajectory Prediction》提出了一种创新模型,通过可变形时空交互模块、时间注意力门控网络和拉丁超立方采样技术,有效解决了行人轨迹预测中的时空交互建模和长尾效应问题。实验表明,该模型在ETH、UCY等数据集上ADE和FDE指标分别比基线降低26%和20%,参数量仅为同类模型的3%。该工作为自动驾驶等领域
2025-05-25 10:04:58
862
1
原创 理解硬链接和软链接:原理与实践
简单来说,链接就是对文件的引用。硬链接是对文件在磁盘中**inode(索引节点)**的直接引用。软链接是一个指向路径的文件,就像是快捷方式。对比项硬链接(Hard Link)软链接(Soft Link)是否有独立 inode❌(与源文件共享 inode)✅(有自己的 inode)文件系统限制❌ 不能跨文件系统✅ 可以跨文件系统删除原文件影响❌ 无影响,内容仍可访问✅ 链接失效(悬挂链接)可否指向目录❌ 通常不允许✅ 可以指向目录本质文件的另一个名字。
2025-05-19 14:44:26
588
原创 Linux系统调用:深入理解 dup 和 dup2 的区别与用法
使用场景推荐用法简单复制描述符dup需要指定目标描述符dup2临时重定向输出dup + dup2配合使用。
2025-05-15 10:01:13
1092
原创 Linux 中 open 函数的本质与细节全解析
在 Linux 下,一切皆文件。而对文件的读写,离不开文件的“打开”操作。虽然 C 语言标准库提供了方便的 fopen,但更底层、更强大的是系统调用 open,掌握它能让你对文件系统控制更细致,在系统编程、驱动开发和高性能服务器开发中尤为重要。
2025-05-14 18:35:59
846
原创 C语言文件读写函数详解与示例(fread、fgets、fgetc、fscanf、fwrite、fputs 和 fputc比较)
在进行文件操作时,C语言为我们提供了多种强大而灵活的函数。本文将详细介绍常用的文件读写函数:fread、fgets、fgetc、fscanf、fwrite、fputs 和 fputc,并通过示例代码加以说明。
2025-05-11 19:33:01
938
原创 【C语言文件操作详解】fopen 函数全解析 —— 模式参数、使用技巧与重定向的区别
在 C 语言中,文件的读写是一个非常常见的需求。fopen 是标准库中提供的函数,用来打开文件,返回一个文件指针供后续操作使用。本篇博客将详细介绍 fopen 的使用方法、每个参数的含义,以及它与 Shell 中 >、>> 重定向符的联系与区别。
2025-05-11 16:27:51
3096
原创 理解进程程序替换:execl、execlp、execv、execvp、execvpe、execve
exec 系列函数对比总结特性/函数名execlexeclpexecvexecvpexecvpeexecve函数原型路径查找机制需要提供完整路径(不进行路径查找)通过PATH环境变量查找路径需要提供完整路径(不进行路径查找)通过PATH环境变量查找路径通过PATH环境变量查找路径需要提供完整路径(不进行路径查找)环境变量支持不传递环境变量(继承当前进程环境)不传递环境变量(继承当前进程环境)不传递环境变量(继承当前进程环境)不传递环境变量(继承当前进程环境)
2025-05-07 21:25:24
1884
原创 Linux 进程等待机制详解:wait 与 waitpid
特性waitwaitpid是否阻塞是可选(通过options控制)是否支持指定子进程否(任意子进程)是(可指定特定 PID)能否等待停止的子进程否是(带WUNTRACED返回值子进程 PID 或 -1(无子进程)子进程 PID 或 0(非阻塞无变化)在日常开发中,如果只是简单地等待任意一个子进程结束,wait 是足够的;但当你需要对特定子进程进行控制、或者实现非阻塞进程管理时,waitpid 就是更合适的选择。
2025-04-30 15:03:43
1214
原创 进程退出全解析:正常退出、异常终止与 exit/_exit 区别
退出场景退出方式退出码特征正常运行完成return 0exit(0)0程序逻辑无误,正常结束逻辑失败return 1exit(1)非0主动退出,非崩溃异常终止(崩溃)段错误 / 未处理异常 / SIGSEGV非0程序被信号强制终止exit() 更适用于希望正常结束程序并进行清理工作的情况,而 _exit() 更适合在子进程中快速退出时使用,比如 fork() 之后子进程遇到错误不希望执行任何清理逻辑时。
2025-04-29 22:21:42
3037
原创 Linux 查看、设置与取消环境变量详解
临时设置环境变量:变量仅在当前终端的 shell 进程中有效,当终端关闭时丢失。是因为它们存储在内存中的当前进程。永久设置环境变量:变量通过写入配置文件,使得在每次新开启终端时,系统会重新读取并加载这些环境变量,从而使变量保持持久性。
2025-04-28 21:40:29
3476
原创 孤儿进程与僵尸进程详解(含C++示例)
孤儿进程(Orphan Process) 是指:当一个子进程还在运行,但它的父进程已经结束了,此时子进程就成为了孤儿进程。僵尸进程(Zombie Process) 是指:子进程已经结束了,但父进程还没有调用 wait() 或 waitpid() 来回收它的资源,于是子进程留下一个“僵尸”条目挂在系统中。类型出现条件危害解决方法孤儿进程父进程退出,子进程仍在运行正常,init会接管无需特别处理僵尸进程子进程退出,父进程未回收消耗系统资源调用wait()或使用SIGCHLD信号处理。
2025-04-28 14:15:32
589
原创 深入了解 Linux 查看进程的指令:ps ajx 及其扩展用法
ps 是 Process Status 的缩写,用来查看系统中的进程信息。ps这通常只显示 当前终端(TTY)下 你自己启动的进程,信息量很少。为了看到更全面的系统进程信息,我们通常会加上一些参数。
2025-04-28 10:17:04
1111
原创 C/C++ 中的 fork 系统调用详解:创建子进程与并行执行
fork() 是 Linux 编程中的一个非常基础但又至关重要的系统调用。通过它,我们可以轻松创建新的子进程,从而实现进程的并行执行。无论是在并行计算、处理多客户端请求,还是进行进程分离,fork() 都是 Linux 系统中不可或缺的工具。
2025-04-27 21:28:01
806
原创 gdb 调试入门到实践:一个完整例子教你用 gdb 调试 C 程序
功能命令编译带调试信息编译带调试信息启动 GDBgdb ./test设断点break 函数名 或 break 文件名:行号启动程序run查看代码list 或 list 行号查看变量print 变量名查看调用栈backtrace 或 bt单步执行(不进入函数)next单步执行(进入函数)step执行到当前函数结束finish继续到下一个断点continue查看断点删除断点delete 编号退出 GDBquit。
2025-04-27 21:17:36
997
原创 使用C语言在Linux上实现简单的进度条
/ 进度条的宽度++i) {// 已完成部分// 当前进度else// 未完成部分// 强制刷新输出缓冲区,使进度条实时更新// 总进度(100%)i <= total;i++) {// 延时50ms,模拟进度变化return 0;这段简单的代码展示了如何使用C语言实现一个在Linux下运行的命令行进度条。通过实时更新输出,用户可以清晰地看到任务的进展。这种技术在许多长时间运行的任务中都有广泛应用,比如文件下载、数据处理等。
2025-04-23 22:24:20
343
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅