学习 Linux高级编程06_A

linux学习书籍推荐linux学习书籍推荐 网上看到的,做个标记。没研究过,仅供参考 linux编程学习 inux 学习书目推荐 Linux基础 1、《Linux与Unix Shell 编程指南》 C语言基础 1、《C Primer Plus,5th Edition》【美】Stephen Prata著 2、《The C Programming Language, 2nd Edition》【美】Brian W. Kern... 阅读详情

问题解答:

         1.exit(状态码)返回状态码有什么意义?

                   返回值被系统得到:系统根据状态码进行日志记录。

                   返回值被调用者得到:system/wait程序会根据返回状态码进行对应处理。

                   exit(状态码) == main函数中的return 状态码;

         2.状态码的第二个字节才是exit()的返回值或者return值。

        

一、进程的基本控制

         1.进程的常见控制函数

                   1.1为什么需要控制进程

                   1.2pause/sleep/usleep

                   1.3atexit on_exit

         2.进程与文件锁

                   在多文件下文件读写是共享的。

                   问题:

                            怎么知道一个文件正在被另外进程读写?

                   解决方案:

                            文件锁。(建议锁)

                   API:

                            fcntl(文件锁受内核参数影响)

                   编程技巧:

                            对一个文件加锁

                            判定一个文件是否存在锁

                   函数说明:

                            intfctnl(

                            intfd, //被加锁的文件描述符号

                            intcmd,/ //锁的操作方式:F_SETLK(如果已经存在,异常返回) F_UNLK F_SETLKW(如果已经加锁,则阻塞等待)

                            structflock *lk); //锁的描述

                           

                            返回值:

                                     0:加锁成功

                                     -1:加锁失败

案例:

         写两个程序:

                   A:加锁

                   B:获取锁的信息

         锁也是一个进程可以共享的信息。

                  

二、信号

         1.信号的作用

                   背景:

                            进程之间通信比较麻烦。

                            但进程之间又必须通信,比如父子进程之间。

                   作用:

                            通知其他进程响应。进程之间通信机制。

                            信号:

                                     接受信号进程马上停止。调用信号处理函数。

                            信号处理函数:

                                     默认处理函数。

                                               打印信号信息,退出进程。

                                     用户处理函数。

                            中断:

                                     软中断。

案例:

         1.进程之中,默认信号处理

         2.进程之中,用户信号处理(中断)

                   kill-s 信号进程ID

                   kill-信号进程ID

                   信号:     数字 1-31 34-64

                                     宏 SIGINT=2

                   ctrl+c发送信号2 SIGNIT

                   kill-l 查看所有信号

         信号:SIGKILLSIGSTOP 不能被处理

案例:

         发送信号

         intkill(pid_t pid, int s)

         进程ID:

                   >0:发送信号到指定进程

                   =0:发送信号到该进程所在进程组的所有进程

                   =-1:发送给所有进程,除init外

                   <0:发送给指定的进程组(组ID=绝对值)

         2.信号的发送与安装

                   signal

                   kill

         3.信号的应用

                   3.1延时器 timeout

                            SIGALRM

                            信号发出函数:alarm

                   3.2定时器 setitimer

                            intsetitemer(int which, //计时方式 (ITIMER_REAL /ITIMER_VIRTUAL /ITMER_PROF)

                                                        conststrcut itimerval *val, //定时器的时间参数

                                                        structitimer *oldval); //返回原来设置的定时器 (如果=NULL, 则不返回)

                            structitimerval

                            {

                                     structtimeval it_interval;//间隔时间

                                     structtimeval it_value//延时时间

                            }

                            structtimeval

                            {

                                     longtv_sec;

                                     longtv_usec;

                            }

                   信号应用:

                            系统与应用程序之间

                            应用程序与应用程序

                            父子进程之间

案例1:

         使用定时器信号,实现多任务。

         实现:

                   实现7位随机数

                   使用中断实现时间的显示

案例2:

         实现父子进程之间通信

         控制进程

         sleep与pause函数被信号影响后

                   sleep不再sleep,pause不再pause

练习:

         1.在curses显示7位随机数

                   其它信号函数 raise      

                  

         4.信号的可靠与不可靠以及信号的含义

                   信号有丢失。(信号压缩)

                   由于历史的缘故:信号有压缩的需求。

                   可靠信号(实时信号)与不可靠信号(非实时信号)

                            早期信号 1-31 31个信号,不可靠(与系统有关)

                            后期信号34-64 31个信号,可靠信号(用户信号)

         5.信号操作

                   信号导致的问题

                   1.信号屏蔽

                            intsigprocmask(int how, //操作方式 SIG_BLOCK, SIG_UNBLOC, SIG_SETMASK

                                                                 constsigset_t *sigs, //操作的信号集合

                                                                 sigset_t*oldsigs) //返回原来操作信号集合

                            1.声明信号结合

                                     sigset_tsigs;

                            2.加入屏蔽信号

                                     一组信号集合维护函数:

                                     2.1清空集合 sigemptyset

                                     2.2添加信号到集合 sigaddset

                                     2.3从集合删除信号 sigdelset

                                     2.4添加所有信号到集合 sigfillset

                                     2.5判定信号是否在集合 sigismemeber

                                    

                            3.屏蔽信号

                            4.接触屏蔽

                   2.信号屏蔽的切换

                            intsigsuspend(sigset_t *sigs)

                            屏蔽新的信号,原来的信号失效。

                            sigsuspend是阻塞函数,对参数信号屏蔽。

                            对参数没有指定的信号不屏蔽,但当没有屏蔽信号处理完毕

                            sigsuspend返回条件:

                                     1信号发生,并且信号是非屏蔽信号

                                     2信号必须要处理,而且处理函数返回后,sigsuspend才返回

                            sigsuspend设置新的屏蔽信号,保存旧的屏蔽信号,而且当sigsuspend返回的时候,恢复旧的屏蔽信号。

                           

                   3.查询被屏蔽的信号

                            intsigpending(sigset_t *sets);

                            当sigususpend没有屏蔽信号发生的时候,

回顾:

         1.进程控制 sleeppasue

         2.理解信号的中断流程

         3.发射信号(shell /code), 处理信号

         4.alarm与setitimer

         5.信号应用:

                   实现简单多任务与进程之间通信

         6.使用信号+sleep/pasue控制进程

         7.信号的屏蔽

         8.了解sigpending与sigsuspend的使用

作业:

         1.写个程序,创建两个子进程,分别计算1-5000与 5001-10000之间的素数

                   通过信号让父进程专门去完成数据保存。

         2.完成课堂上的作业:

                   显示7位随机数,同时使用定时器显示时间,

                   在使用键盘控制7位随机数的停止与继续显示。

                   (建议美化)

         3.完成如下作业:

                   在屏幕上水平同时显示移动两个字符。

思考:

         信号处理函数调用过程中,是否被其他信号影响。

                           

明天:

         1.信号与进程间数据传递

                   sigqueue===kill与sigaction==signal

         2.IPC:

                   基于文件

                            无序文件:普通文件,映射

                            有序文件:1管道文件(有名/匿名管道)2 socket文件

                   基于内存

                            无序内存:内存共享

                            有序内存:共享队列

Linux系统编程学习路线图 编写一个多进程程序,父进程创建多个子进程,子进程分别执行不同的任务(如计算、打印等),并通过进程间通信机制实现数据共享和同步。掌握程序性能优化的方法和技巧,包括代码优化(如算法优化、数据结构优化等)、内存管理优化(如减少内存泄漏、优化内存分配策略等)、开发一个简单的实时控制系统,如一个温度控制系统,能够实时监测温度并根据设定值进行控制调节,保证系统的实时响应性能。编写一个简单的内核模块,实现一个自定义的系统调用,用于获取系统当前的某些状态信息(如进程数量、内存使用情况等)。 阅读详情

相关推荐

linux高级编程

b 块设备文件 block test -b /dev/sda --- 硬盘。/bin/bash --- 表示当前这个shell脚本用哪个shell来解释执行。/bin/bash //编辑文件 shebang。2.编写脚本 //#!4. ./XX.sh //执行文件。//条件的生成 --test的命令 //注意: test 执行结果为真 0。

2301_81028188的博客 712

exit()和return的含义及区别

exit的参数是返回给os的,exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程;通常情况:在整个程序中,只要调用exit就结束(当前进程或者在main时候为整个程序)。

weixin_43297914的博客 1037

怎样学习LINUX编程 如何入门【多篇文章整理集合】

Linux下开发学习步骤  1、先熟悉linux系统的常用命令。  2、深入学习emacs或者vim。值得你花半年时间系统学习!以后我们就是用这个编辑器来写程序的了,经过配置,emacs完完全全就是一个IDE了,像代码跳转,自动补齐(智能感应)以及其他的一些好用功能。  3、学习makefile的编写。因为我们是用makefile来组织我们的程序的就像vc6里头又dsp/dsw文件一样(当然也vc自己的makefile)。有些好的工具能帮助我们编写可以移植的makefile,如autoconf等。  4、学

2572

exit(0)与exit(1)、return区别

exit(0):正常运行程序并退出程序; exit(1):非正常运行导致退出程序; return():返回函数,若在主函数中,则会退出函数并返回一值。 详细说: 1. return返回函数值,是关键字;  exit 是一个函数。 2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。  3. return是函数的退出(返回);exi

mzfen1988 1760

全面Linux高级编程开发教程

进程是操作系统中最重要的概念之一,它是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位。每个进程都有自己的地址空间,并且使用系统资源(如CPU、内存、文件、I/O等)。进程具有以下基本特性:并发性:多个进程可以在单个CPU上并发执行,通过时间片轮转的方式,实现宏观上的并行处理。动态性:进程是动态创建、执行和消亡的。操作系统为每个进程分配运行时所需的资源,进程执行完毕后资源被释放。独立性。

weixin_42581003的博客 842

Linux编程白皮书:从基础到高级应用

本文还有配套的精品资源,点击获取 简介:本书为程序员和系统管理员提供了一套全面的Linux程序开发指南,涵盖了从命令行基础到系统调用和库函数的高级用法。书中详细介绍了Linux命令行工具的使用、文本处理工具如grep、sed、awk的应用,以及核心系统调用如open、read、write等的具体操作。此外,还讨论了信号处理、线程和内存管理等编程要素,并深入探讨了C语言及其标...

weixin_42160645的博客 917

exit命令的返回值

注意: shell中,单独的exit命令,返回的return code是上一条命令的returncode,而不是一定为0! 如下: [09:32 data]$ cat t.sh #!/bin/bash rm ddasksjdklfasjdkjfaklsdjflkajdslkfjadslkjfdlksaj exit [09:32 data]$ sh -x t.sh + rm

问道于盲 3087

保姆级教程:用OpenCV搞定鱼眼双目相机的标定与测距(附完整C++代码)

本文详细介绍了使用OpenCV进行鱼眼双目相机标定与测距的全流程,包括环境搭建、数据采集、单目标定、双目标定、立体校正和视差计算等核心步骤。通过完整的C++代码示例和参数调优指南,帮助开发者快速实现高精度的双目测距系统,适用于机器人导航、VR全景拍摄等领域。

weixin_42573113的博客 387

Linux下高级C编程(学习总结)

Linux下高级C编程 第一章 unix/linux系统的基本概念 第二章 unix/linux系统下的编程基础和开发方式 第三章 unix/linux系统下的内存管理 第四章 unix/linux系统下的文件管理和目录操作 第五章 unix/linux系统下的进程管理 第六章 unix/linux系统下的信号处理 第七章 unix/linux系统下的进程间通信 第八章 unix/linux系统下的网络编程 第九章 unix/linux系统下的多线程编程 文章目录Linux下高级C编程前言一、linu

weixin_39688262的博客 3480

从零开始:Vivado中自定义串口通信IP核的完整实现

本文详细介绍了在Vivado中从零开始实现自定义串口通信IP核的完整流程,包括Verilog核心代码编写、仿真验证、IP核封装与参数化配置技巧。通过AXI-Lite总线实现动态配置,提升FPGA开发效率,适用于各种嵌入式系统通信需求。

weixin_29274969的博客 326

压电传感器信号放大难题?用运放设计电荷放大器的5个关键步骤

本文详细解析了压电传感器信号放大难题,并提供了用运放设计电荷放大器的5个关键步骤。从电压放大到电荷放大的范式转换,到运放选型、反馈网络设计、PCB布局及频响特性验证,帮助工程师解决工业自动化中的信号衰减问题,提升测量精度和稳定性。

weixin_27303545的博客 447

【Linux】Linux学习路线图:如何系统地学习Linux,从基础到高级

学习Linux操作系统是一项有价值的技能,无论是系统管理员、开发人员还是数据科学家,掌握Linux都能极大地提升工作效率。本文将提供一个系统的学习路线图,从基础到高级,帮助你全面掌握Linux操作系统。

科技改变人类,技术成就未来 5052

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 370

Linux 编程学习书籍

Linux 入门书籍。Linux 进阶书籍。

云满笔记 2877

阿里云百炼全解析:一站式大模型开发平台的架构与行业实践

摘要: 阿里云百炼平台通过一站式架构革新大模型开发范式,将传统碎片化工具链整合为统一工作流,实现开发周期从月级到小时级的跃迁。其核心架构包含接入层、引擎层与资源层,关键技术突破包括MCP服务协议、多模态引擎及高性能训练优化。平台提供全生命周期开发支持,从数据准备到模型部署,并通过VPC隔离、数据加密构建企业级安全体系。已在医疗、电力等行业实现显著增效,如阿斯利康药物分析系统准确率提升至95%。未来将向多Agent协同、边缘计算等方向演进,推动AI技术深度融入产业核心。

fudaihb的博客 1988

成功解决AttributeError: ‘ImageDraw‘ object has no attribute ‘textsize‘

​ 成功解决AttributeError: 'ImageDraw' object has no attribute 'textsize' 目录 解决问题 解决思路 解决方法 解决问题 AttributeError: 'ImageDraw' object has no attribute 'textsize' 解决思路 属性错误:'ImageDraw'对象没有属性'textsize' 解决方法 最新的Pillow 10.0.0 版本已经删除了这个函数,导致两个库(Pillow 、wordc

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4775

Linux高级编程学习笔记、文件编程、标准IO、文件IO

1、实现用户应用程序的两条路径:a、直接使用操作系统直接提供的函数(系统调用--操作系统内核提供的函数)b、使用“库函数”库函数方式:标准C库,功能丰富,看不到源代码有安全风险C库中的相关文件操作的函数 -- 标准IO (Input Output)系统调用方式:简单,看得到源代码标准io;stdio.h。

Ricky111zzz的博客 1345

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4453

Linux环境编程(高级编程)

基于Linux操作系统这个环境,编程。分为以下四个模块:文件编程多任务编程(进程,线程)网络编程网页+数据库例:网易.mp3把歌曲保存成mp3这个文件 //文件编程歌曲从服务器传输到本地 //网络编程听歌的同时,可以聊天,可以玩游戏 //多任务编程目标:实现应用的功能使用Linux 系统提供的一些函数来实现功能学习的方式方法:1.Linux提供的这些函数---该怎么用?

m0_63067779的博客 956

一文看懂EMMC原理及工作过程

CMD:用于设备初始化和命令传输的双向通道, CMD信号有2种工作模式:1#:漏极开路--->用于初始化模式2#:推拉--->用于快速命令传输其中命令从eMMC主机控制器发送到eMMC设备,响应从设备发送到主机。DAT [7:0]:双向数据信号,模式包括:1(DAT0);默认情况下,通电或重置后,只有DAT0用于数据传输。DAT信号在推挽模式下工作,eMMC设备包括数据线DAT1-DAT7的内部上拉。进入4位模式后,设备立即断开线路DAT1、DAT2和DAT3的内部上拉;

Airer_00的博客 2030

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

linux高级编程学习心得

linux高级编程

weixin_57759804的博客 578

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

探索Linux编程的深度:《Linux高级程序设计中文第三版》资源推荐

探索Linux编程的深度:《Linux高级程序设计中文第三版》资源推荐 【下载地址】Linux高级程序设计中文第三版资源下载 - **文件名**: Linux高级程序设计中文第三版.pdf- **格式**: PDF- **特点**: 高清晰度,带有书签- **适用对象**: 对Linux编程感兴趣的学习者 ...

gitblog_09708的博客 675

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

为什么要学习 Linux 环境下的编程

为什么要学习 Linux 环境下的编程   Linux 是一个开放、灵活、跨平台的操作系统,上至庞大的数据中心,下至可放于掌心中的嵌入式设备,无处没有 Linux 的身影。更为重要的是, Linux 是一个与 Unix 既一脉相承又与时俱进的系统。可以说,上世纪70年代学习的 Unix 知识和技巧,在今天仍然大有用武之地,这与 Windows 平台的开发形成了鲜明的对比。程序员不用担心今天微软出

粤嵌 1531

Linux学习路线及网络编程经典书籍(转载)

linux学习资源整理:https://zhuanlan.zhihu.com/p/22654634 Linux初学者(学习资料):https://zhuanlan.zhihu.com/p/21723250 知乎 - 你是如何学习 Linux 编程的?:https://www.zhihu.com/question/20730157 如果让你推荐一本 Linux 书籍,你会推荐什么?:https://www.zhihu.com/question/20341603/answer/246718241 Linux+开

shuux666的博客 2313

linux环境编程 学习,学习linux环境高级编程首先学习的是文件的操作。因为有.pdf...

学习linux环境高级编程首先学习的是文件的操作。因为有学习 Linux 环境高级编程,首先学习的是文件的操作。因为有一句很有趣的话“Linux下一切皆文件”。所以掌握了文件操作的方法,也就算摸到了门路。5.1 文件和目录首先直观地感受一下,在终端下输入命令 ls -l,如图 5-1 所示。图5-1 文件目录5-1 2图 的前 行为drwxr-xr-x 2 root ...

weixin_34364239的博客 133
上一篇: DLL编程笔记
下一篇: 学习 Linux高级编程06_B
dblion
博客等级 码龄16年 23粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值