
linux
文章平均质量分 93
linux学习记录
共享家9527
欢迎学习交流C,C++,数据结构,Python,Linux,共同进步
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux_https,udp,tcp协议(更新中)
网络应用层及传输层协议剖析原创 2025-08-05 19:44:19 · 878 阅读 · 15 评论 -
linux_前台,后台进程
本文介绍了Linux系统中进程管理的几个关键概念:1)会话(session)和进程组(pgid)的组织方式,一个会话包含多个进程组;2)前台与后台进程的区别在于是否拥有终端控制权;3)通过jobs/fg/bg命令管理后台任务;4)守护进程的实现原理:使用setsid系统调用创建新会话,脱离终端控制,使进程能长期后台运行。文章还给出了将普通进程转为守护进程的具体实现步骤,包括创建子进程、调用setsid、重定向标准I/O到/dev/null等关键技术点。这些机制共同构成了Linux系统后台服务管理的基础。原创 2025-07-29 14:19:24 · 853 阅读 · 15 评论 -
linux_服务端与客户端剖析
本文介绍了基于UDP协议的套接字编程实现,包括服务器端和客户端的设计。主要内容包括:1) 套接字的基本概念和类型(TCP流式套接字和UDP数据报套接字);2) 服务器端的实现,包括创建套接字、绑定地址、接收和发送数据的流程;3) 客户端的实现,包括初始化服务器地址、发送和接收消息;4) 日志系统的设计,支持不同级别的日志输出和多种输出方式。通过详细的代码示例和注释,展示了如何构建一个基本的UDP通信系统,包括错误处理、字节序转换等关键细节。该实现可用于构建简单的客户端-服务器通信应用。原创 2025-07-23 00:59:34 · 1141 阅读 · 15 评论 -
Linux 自旋锁
本文介绍了Linux内核中的自旋锁机制。自旋锁通过"忙等待"(线程原地循环重试)而非休眠的方式实现同步,适用于锁持有时间极短的场景,避免了上下文切换的开销。文章详细分析了自旋锁的工作原理、Linux内核对其的优化(如抢占禁用、SMP支持等),以及使用时的注意事项:临界区必须简短、禁止递归加锁、区分中断上下文等。通过示例代码展示了自旋锁的实际应用,并与互斥锁进行对比,指出自旋锁适合短时操作而互斥锁适合长时任务。最后强调正确使用自旋锁的关键在于评估锁持有时间长短。原创 2025-07-19 20:51:11 · 739 阅读 · 3 评论 -
linux-线程互斥
这是因为 count++ 并非原子操作,当两个线程同时读取 count 的旧值、各自加1再写回时,就会出现“覆盖”现象——比如线程A和B同时读到 count=100 ,各自加1后写回,最终 count 只增加了1,而非预期的2。所有线程都能访问同一块内存(如 int mutex ), xchgb 让线程把“自己寄存器里的0”和“黑板上的mutex值”交换,本质是用硬件原子指令,实现“我要占锁”的宣告。- 操作完成后,线程“释放锁”( pthread_mutex_unlock ),让其他线程有机会获取锁。原创 2025-07-15 18:04:11 · 957 阅读 · 1 评论 -
Linux-线程控制
本文介绍了Linux线程管理的核心概念和操作。主要内容包括:1) pthread_join()函数的使用及注意事项,用于线程同步和资源回收;2) 线程退出的三种方式(return、pthread_exit()、pthread_cancel())及其区别;3) 线程间通信机制,包括通过指针传递自定义对象;4) 线程底层实现原理,涉及clone系统调用、TCB和TID;5) 分离线程的设置方法(pthread_detach());6) 线程私有化实现(__thread关键字)。文章通过代码示例详细说明了这些操作原创 2025-07-13 17:40:44 · 609 阅读 · 4 评论 -
linux_线程概念
Linux线程本质上是复用进程内核数据结构的轻量级执行流,虽实现方式特殊但功能完备。线程共享进程地址空间,切换效率高(无需重载页表等资源),创建成本低,能提升多核CPU利用率,但也存在同步复杂、健壮性差等缺点。Linux通过pthread库封装轻量级进程接口提供线程功能,编程时需注意线程安全与资源管理。线程崩溃将导致整个进程终止,体现了"进程资源容器,线程执行单位"的设计理念。原创 2025-07-12 22:16:15 · 565 阅读 · 6 评论 -
linux-进程信号的产生与发送
本文介绍了Linux系统中的信号机制及其应用。信号是进程间通信的一种异步通知方式,用于处理突发事件。文章首先阐述了信号的基本概念,包括信号的识别和处理能力要求,以及信号产生后的处理时机。接着详细说明了信号的三种处理方式:默认动作、忽略和自定义动作。通过分析常见信号如SIGINT、SIGTERM等,解释了其默认行为和应用场景。文章还探讨了信号的产生方式,包括键盘组合键、系统命令、异常和软件条件等。特别介绍了alarm系统调用的定时功能,以及信号退出类型term和core的区别。最后说明了云服务器默认关闭核心转原创 2025-07-09 23:56:59 · 873 阅读 · 10 评论 -
进程间的通信
进程间通信的核心是借助操作系统管理的共享资源打破进程隔离性,实现数据交互和协同工作。主要方法包括:1) 管道等文件级通信;2) SystemV IPC机制(消息队列、共享内存、信号量);3) 同步工具(互斥量、条件变量等)。其中共享内存是最高效的方式,通过shmget创建、shmat挂接、shmdt分离、shmctl管理生命周期,让进程直接访问同一物理内存。关键点在于:通信资源由OS统一管理,进程通过系统调用访问;需处理同步问题;IPC对象遵循SystemV/Posix标准;共享内存生命周期独立于进程。典型原创 2025-07-03 19:51:17 · 901 阅读 · 11 评论 -
动,静态库
本文摘要: 文章详细介绍了静态库和动态库的设计与使用方法。静态库通过将多个源文件编译为目标文件并打包(如libmymath.a),需配合头文件使用,编译时需指定路径(-I)和库链接(-L -l)。动态库则需添加-fPIC和-shared选项生成共享库(如libmymath.so),运行时需解决路径问题。文中对比了三种静态库使用方式:指定路径、系统路径安装(可能污染系统)和软链接,并强调动态库的灵活性。最后通过全局变量验证执行结果,提供完整的Makefile示例。原创 2025-06-23 21:07:34 · 245 阅读 · 8 评论 -
linux文件管理
本文探讨了文件系统的核心原理与操作接口。主要内容包括:1) 文件由内容和属性组成,打开文件时属性加载到内存,通过进程管理;2) C语言文件操作接口如fopen的读写模式("w"覆盖/"a"追加)及路径处理;3) Linux系统调用open的底层实现,包括文件描述符、权限控制等;4) 访问文件的本质流程:通过文件描述符表映射到内核文件表项和inode,最终访问磁盘数据。文章对比了C标准库fopen与系统调用open的区别,并阐述了从用户空间到磁盘访问的三层映射机制。原创 2025-06-13 23:11:18 · 1402 阅读 · 18 评论 -
Linux进程控制
本文摘要:本文系统探讨了Linux进程管理中的进程终止机制,主要内容包括:进程退出场景:分为代码正常运行完毕(结果正确/不正确)和异常终止三种情况,重点分析了异常终止的信号机制和退出码含义;2.进程退出方法:详细对比了return、exit和_exit的区别,通过实例展示exit会刷新缓冲区而_exit直接终止的特性;3.进程等待机制:阐述wait/waitpid解决僵尸进程问题的必要性,解析status参数的位结构(异常信号+退出码);4.程序替换原理:通过exec系列函数实现进程内容替换而不原创 2025-06-07 20:48:45 · 739 阅读 · 28 评论 -
Linux进程概念
在32位的地址和数据总线--->没跟总线会发出强信号(1)和弱信号(0)两种电信号,形成类似于二进制的信息,操作系统会根据数据导线传输的32信号访问内存中对应的地址,电信号共2^32种。原创 2025-05-30 22:48:38 · 1255 阅读 · 31 评论 -
冯·诺依曼体系:现代计算机的底层逻辑与百年传承
从第一台电子计算机到如今的云计算、人工智能,冯·诺依曼体系始终是计算机科学的根基。它不仅定义了计算机的工作方式,更启发了无数技术创新。理解这一体系,就像掌握了打开现代科技世界的钥匙,让我们得以窥探计算机背后的神秘逻辑。未来无论技术如何演进,冯·诺依曼的智慧都将持续闪耀在计算领域的星河之中。如果你对计算机体系结构感兴趣,不妨尝试编写一段简单的汇编程序,亲自体验指令在冯·诺依曼架构中的运行轨迹,这或许会让你对这一伟大设计有更深的感悟。原创 2025-05-02 12:08:19 · 1853 阅读 · 17 评论 -
Linux调试器 - gdb使用指南
debug 模式下,程序保留了丰富的调试信息,包括变量名、函数名、行号等,这使得开发者能够在调试过程中清晰地了解程序的内部状态,方便查找问题。当我们已经仔细检查完程序某个区域的代码,确认该部分代码逻辑无误,想要让程序继续执行下去,以观察后续代码的执行情况时,使用该指令可让程序快速运行,直到遇到下一个断点或程序结束。执行到当前函数返回,然后暂停下来等待后续命令。当我们进入一个函数内部进行调试,在查看完函数内部相关信息后,若想快速回到函数调用的上层继续调试,使用该指令可直接执行到函数返回,无需逐行单步执行。原创 2025-04-28 22:06:28 · 1392 阅读 · 28 评论 -
Linux 开发与 Git 入门实践:从进度条小程序到代码托管
2. 在新页面中输入项目名称(注意名称不能重复,系统会自动校验),可选择填写项目描述,设置项目为公开(Public)或私有(Private),还可以选择是否初始化 README 文件等。通过使用 git log 及其相关选项,我们可以方便地回顾项目的开发历史,了解每次代码改动的情况,在排查问题、追溯功能添加等场景中非常有用。- 辅助代码管理:在多人协作时可察觉冲突隐患;3. 在创建好的项目页面中复制项目的链接,链接有 HTTPS 和 SSH 两种形式,可按需复制,以备接下来进行下载。原创 2025-04-27 16:02:55 · 2595 阅读 · 22 评论 -
深入探究Linux项目自动化构建工具:make与Makefile
一个大型工程中,源文件数量众多,且依据类型、功能、模块等分布在不同目录。Makefile 的出现,就是为了定义一系列规则,明确哪些文件需先编译、哪些后编译、哪些要重新编译,甚至执行更复杂的操作。make 则是一个命令工具,专门解释 Makefile 中设定的指令。常见的IDE,如Delphi的 make 、Visual C++的 nmake 、Linux下GNU的 make ,都支持这一编译方式。二者配合,实现项目自动化构建,极大提升软件开发效率。原创 2025-04-23 22:45:27 · 1039 阅读 · 27 评论 -
深入探究Linux编译器gcc/g++:从基础到进阶
连接阶段是将多个目标文件以及所需的库文件组合在一起,生成最终的可执行文件或库文件。通过 gcc hello.o -o hello ,这里的 -o 选项指定输出文件名,执行该命令后,就得到了可以运行的 hello 程序。原创 2025-04-16 21:56:35 · 958 阅读 · 16 评论 -
深入探索Linux开发工具:Vim与Yum
Vim和Yum在Linux开发工作流中扮演着重要角色。熟练掌握Vim的各种操作和配置技巧,能让代码编辑变得高效流畅;而灵活运用Yum进行软件的安装、卸载和管理,可轻松构建和维护开发环境。希望通过这篇博客,能帮助大家更好地驾驭这两款工具,在Linux开发之路上更进一步。原创 2025-04-13 13:47:52 · 1163 阅读 · 13 评论 -
Linux常用命令详解:从基础到进阶
Linux系统中的这些常用命令,从文件处理到系统管理,从时间操作到其他实用功能,构成了我们日常操作和管理系统的基础。熟练掌握它们,能让我们在Linux系统的使用中更加得心应手,无论是进行开发工作、系统运维还是学习研究,都能事半功倍。不断实践和积累对这些命令的使用经验,将有助于我们在Linux领域不断进阶。原创 2025-04-05 14:25:37 · 1802 阅读 · 14 评论 -
深入剖析Linux常用命令,助力高效操作
在Linux系统的世界里,命令行是我们与系统交互的强大武器。熟练掌握一些常用命令,能极大提升我们的工作效率。今天,就带大家深入了解几个实用的Linux命令。原创 2025-04-02 21:05:09 · 1266 阅读 · 18 评论 -
Linux基础命令:开启系统操作之旅
在Linux的世界里,命令行是我们与系统交互的重要方式。掌握基础命令,就如同拥有了一把开启系统宝库的钥匙。本文将详细介绍一些常用的Linux基础命令,帮助大家快速上手Linux操作。这些Linux基础命令是日常操作中频繁使用的工具。ls 帮我们查看文件和目录内容, pwd 定位当前位置, cd 在目录间穿梭, touch 管理文件时间和新建文件, mkdir 创建目录, rmdir 和 rm 负责清理不再需要的目录和文件。原创 2025-03-31 17:23:22 · 2018 阅读 · 16 评论 -
从0到1,一文读懂Linux的发展历史
Linux,这个如今在全球范围内广泛应用的开源操作系统,其发展历程堪称一部充满创新与协作的传奇史诗。从一位大学生的个人项目起步,Linux逐步成长为影响深远的开源操作系统,对整个计算机行业产生了深远的影响。今天,让我们一同回顾Linux的发展历程,探寻它是如何从一个业余爱好项目,发展成为全球开源社区的代表性成就。原创 2025-03-30 17:41:05 · 1737 阅读 · 18 评论