第4章第6节 任务自结束

底层开发者手册之C语言基础及项目开发2.4.5 将《底层工作者手册之C语言基础及项目开发》改名为《底层开发者手册之C语言基础及项目开发》,并做了一些修改,更新到2.4.5节。不过其中有一些章节还没有写完。先凑合看吧   《C》这本手册是《底层开发者手册》系列的第二本,但它却是我第一个开始写的,早在2008年年底时我就开始着手写这本手册,但写了没多久就因为发生了一个意外而终止了。在2010年年初的时候我开始了第四本手册的写作——嵌入式操作系统内核,目前已接近完工状态(我的博客可以下载,blog.sina.com.cn/ifreecoding),现在我又回过头来重新写《C》这本手册,将会采用与《嵌》一样的方式,写一部分就在网上发布一部分,在这同时我又在收集第一本和第三本手册的材料,准备将这4本手册同时写完,使读者可以按照顺序阅读这4本手册,层层深入底层开发者的工作。   一个良好的C语言基础是编写嵌入式设备底层代码的必要条件,如今介绍C语言的书不少,介绍嵌入式C的书也不少,但几乎没有结合实际项目来介绍C语言的,看完这样的书,C语言会用了,但做出来的产品只能称之为中国校园式产品,为求实现功能不择手段,根本不适合在项目中使用。另有一些自称C语言精华的书或网上的面试宝典,尽是讲一些偏题怪题,这可能满足了作者的虚荣心,但却在将新手引向一个错误的方向。当然,仁者见仁智者见智,这仅是我个人的观点,也一定会被他人所反驳的,正是出现百家争鸣的局面社会才能进步。   本手册分为2部分,第一部分介绍C语言基础,在介绍C基础时会结合嵌入式中的应用加以介绍,将重点介绍在项目开发中有用的内容,对于过分追求技术但又没有什么实际用处的内容不做过多的介绍,对于这些内容最多会提一下,让读者知道有这种情况存在。第二部分介绍项目开发,从项目需求、分析、设计、编码、测试、维护的角度来介绍编写代码。记住,编码只是项目中的一个部分,在中国校园式产品中这可能几乎就是全部了,但在一个可以称之为产品的项目中,它只是一部分,并且项目越大它所占的比重越小。   我在看书学习新知识时,希望看到的是那些写的多一些详细一些,也就是废话多一些的书,可以傻瓜式的一步步跟下来,不希望看到那些对关键之处一笔带过还故作高深的书,所以本手册就以废话多为原则,可能会写的罗嗦一些,只求能看的明白一些。当然,本人知识水平有限,有些知识会有理解上的错误,或者有未触及的地方,错误一定是有的,就像做产品一样,不可能没有错误。我写本手册的目的在于分享我的知识,注重实际应用,这对某一论坛上的某些只会空谈经验、分析汉字语法的理想C语言文艺专家们来说可能会不屑一顾。如有问题,请登录我的博客blog.sina.com.cn/ifreecoding反馈,我虚心接受,但我拒绝那些假大空的为了批评而批评的建议。我们做项目不是写论文,是实实在在的东西!   为新手写一本介绍C语言的书很难,因为它牵涉到非常多的知识作为基础,其中的一些知识很可能需要使用另外几本书的篇幅来介绍,而且知识是耦合在一起的,在介绍前面的时候会涉及到后面的知识,对于新手来说,没有对C形成一个全貌,无法理解。因此给新手的建议是只能多看几遍,第一遍大致看看,掌握全貌,不要细读,然后再多读几遍,仔细分析各种问题,并结合例子,自己动手编程,调试,这个过程非常重要,一定要自己动手编程,光看是没有用的,只有自己动手解决了问题,才能从根本上理解问题。 C语言入门可能会比较容易,但不要指望几个月时间就能熟练掌握C语言,如果做底层编码的话则需要以年为单位来衡量。 立即下载


目前更新到5.3节,请在
http://dl.dbank.com/c02ackpwp6下载5.3节的全部文档

本节源代码请在http://dl.dbank.com/c0ss54iddw下载

 

 

第6节 任务自结束

上节增加了删除任务的函数MDS_TaskDelete,任务可以调用该函数结束其它任务或自身任务的运行。在前面章节我们说过,目前任务还不具备自结束功能,需要使用类似while的结构循环运行。本节我们将增加任务自结束功能,在创建任务时不再受任何限制。

 

任务要做到自结束,需要解决2个问题,一,任务需要能脱离操作系统的调度。二、任务在结束后,操作系统需要能发生调度,切换到下个任务继续运行。

这2个问题我们都可以像上节那样,调用MDS_TaskDelete函数解决,但如果使用MDS_TaskDelete函数来实现任务的自结束,那么MDS_TaskDelete函数就必须以显式的方式写在每个任务主函数的最后一行,当任务运行到结束时,任务会运行MDS_TaskDelete函数结束自身的运行。这样做有一个明显的缺点,我们需要为每个任务增加这样一行代码,不但对用户进行了约束,使用不方便,而且如果用户忘记了增加这行代码,那么操作系统运行到任务结束后就会崩溃掉。

 

前面我们介绍过,LR寄存器中保存的是本函数返回上级父函数的PC指针,返回父函数时只要跳转到该PC指针就可以了。如果我们要做到任务自删除,那么就可以借用这个功能,可以将MDS_TaskDelete函数认为是每个创建任务所使用的主函数的父函数,在任务初始化时,将MDS_TaskDelete函数的地址赋给LR寄存器,这样当任务运行完最后一条指令时,它就会取出LR寄存器中的MDS_TaskDelete函数的地址,跳转到MDS_TaskDelete函数,实现任务的自结束功能。这种方式是隐式的,不会对用户做任何限制,只需要我们修改MDS_TaskStackInit函数代码,增加对LR寄存器的初始化就可以一劳永逸了。

00011  void MDS_TaskStackInit(M_TCB* pstrTcb, VFUNC vfFuncPointer)

00012  {

00013  

……   ……

00032  

00033      pstrRegSp->uiR14 = (U32)MDS_TaskSelfDelete; 

00034  

……   ……

00043  

00044  }

MDS_TaskStackInit函数的改动量非常小,只需要在33行将MDS_TaskSelfDelete函数赋给LR寄存器。MDS_TaskSelfDelete函数封装了MDS_TaskDelete函数,将存放当前指针的全局变量gpstrCurTcb传给MDS_TaskDelete函数,完成任务的自删除。

00191  void MDS_TaskSelfDelete(void)

00192  {

00193      (void)MDS_TaskDelete(gpstrCurTcb);

00194  }

 

本节的改动已经介绍完毕,本节的验证函数与上节非常相似,其中TEST_TestTask1和TEST_TestTask2函数与上节完全一样,TEST_TestTask3函数修改为只循环6次,每次循环时间为1000 ticks。由于TEST_TestTask3函数具有最高优先级,并且在开始时delay了2000 ticks,因此它会在8000 ticks时运行完毕,按照本节的设计,在8000 ticks时它应该会自结束运行,由任务删除钩子函数打印出任务删除的信息。

00053  void TEST_TestTask3(void)

00054  {

00055      U8 i;

00056  

00057      

00058      for(i = 0; i < 6; i++)

00059      {

00060          DEV_PutStrToMem((U8*)"\r\nTask3 is running! Tick is: %d",

00061                          MDS_SystemTickGet());

00062  

00063          DEV_DelayMs(5000);

00064  

00065          (void)MDS_TaskDelay(500);

00066      }

00067  }

 

除此之外root任务也不需要再调用MDS_TaskDelete函数自我删除,也是由本节新增加的隐式删除方式进行自删除。

00014  void MDS_RootTask(void)

00015  {

00016      M_TASKOPT strOption;

00017  

00018      

00019      DEV_SoftwareInit();

00020  

00021      

00022      DEV_HardwareInit();

00023  

00024      

00025      (void)MDS_TaskCreate((U8*)"Test1", (VFUNC)TEST_TestTask1, gaucTask1Stack,

00026                           TASKSTACK, 2, (M_TASKOPT*)NULL);

00027  

00028      

00029      strOption.ucTaskSta = TASKREADY;

00030      (void)MDS_TaskCreate((U8*)"Test2", (VFUNC)TEST_TestTask2, gaucTask2Stack,

00031                           TASKSTACK, 3, &strOption);

00032  

00033      

00034      strOption.ucTaskSta = TASKDELAY;

00035      strOption.uiDelayTick = 2000;

00036      (void)MDS_TaskCreate((U8*)"Test3", (VFUNC)TEST_TestTask3, gaucTask3Stack,

00037                           TASKSTACK, 1, &strOption);

00038  

00039      (void)MDS_TaskDelay(10000);

00040  

00041      

00042  

00043  }

本节运行结果截图如下:

第4章第6节 <wbr>任务自结束

图 50  任务自删除的打印信息

读者可以访问http://blog.sina.com.cn/ifreecoding网站下载视频,观看全部数据的打印过程,

 

可以看到本节实际运行打印出的结果与我们上节的实际运行打印出的结果是一致的,这也是与我们设计相符的,但这里还是有一点稍微的不同,见图51:

第4章第6节 <wbr>任务自结束

图 51  任务被删除与自删除的打印信息对比

图51左边是上节打印输出的数据,右边是本节打印输出的数据,这两组数据对比的结果如图51所示,只有90和92行的结果不同。上节当系统运行到8000 ticks时,root任务delay时间耗尽,恢复到running状态,删除了TEST_TestTask3任务,之后又重新进入delay状态,将CPU控制权让给了TEST_TestTask2任务。而本节TEST_TestTask3任务先是delay了2000个ticks,然后运行了6次for循环,6次for循环后,系统时间为8000 ticks,TEST_TestTask3任务运行结束,自己结束了运行,将CPU控制权让给了TEST_TestTask2任务,因此本节删除TEST_TestTask3任务的操作是在TEST_TestTask3任务中完成的,只有这点与上节在root任务中删除TEST_TestTask3任务是不同的。

 

图51的截图是Beyond Compare工具软件的截图,Beyond Compare是一款比较文件和文件夹的工具,它可以比较出不同源代码文件之间的细微差别并标记出来,即使你在成千上万行代码中只修改了1个字符,它也会发现并标记出来,这对于软件的维护有着非常重要的意义。

 

使用工具软件解析本节任务切换过程的数据,结果如下图所示:

第4章第6节 <wbr>任务自结束

图 52  4.6节任务切换过程图

对比上节中任务切换过程的图49,可以明显的看出在8000 ticks时,本节是切换到了TEST_TestTask3任务,而上节是切换到了root任务。

底层工作者手册之嵌入式操作系统内核4.4 Mindows操作系统更新到4.4节看,增加任务任务切换钩子功能,更多资料请登陆www.ifreecoding.com下载。 Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字节,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将Wanlix和Mindows的开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核”一书,本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要的是从原理的角度对操作系统的功能做了分析、设计,从无到有循序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内核的过程,这样的一个过程对你来说应该也是一个最好的学习过程。 如果你有一定的C语言基础,并且对硬件也有稍微的了解,那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、扩展你需要的操作系统功能! 请登陆www.ifreecoding.com获取更多资料 立即下载

相关推荐

底层工作者手册之嵌入式操作系统内核5.3

Mindows操作系统更新5.1~5.3节,将wanlix从ARM7内核移植到cortex内核,更多资料请登陆www.ifreecoding.com下载。 前面基础知识介绍完毕,本节开始真刀真枪的移植代码了。本节将Wanlix3.3节的代码从ARM7内核移植到TI和ST的cortex内核的芯片上,移植完成后通过串口打印可以看到移植的效果。 如果你有STM32的板子,现在就可以跑! /***************************************************************************/ Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字节,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将Wanlix和Mindows的开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核”一书,本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要的是从原理的角度对操作系统的功能做了分析、设计,从无到有循序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内核的过程,这样的一个过程对你来说应该也是一个最好的学习过程。 如果你有一定的C语言基础,并且对硬件也有稍微的了解,那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、扩展你需要的操作系统功能! 请登陆www.ifreecoding.com获取更多资料 /***************************************************************************/

前言

源码请在https://github.com/ifreecoding/MbedRtos.git下载 前言 目前我所见的绝大部分介绍操作系统的书籍只是从应用的角度告诉读者应该如何使用操作系统,而且相当一部分书籍只是把原有的用户手册整理了一下便出书了,这样的书籍只能当做一本使用手册去查,从学习的角度来说意义不大,一不介绍实现背景、原理,二不介绍应用例子,无法让读者深刻体会操作系统的用法。

ifreecoding的博客 593

相对跳转指令和绝对跳转指令的特殊用法

当程序的编译地址与运行地址不一致时,使用相对跳转指令和绝对跳转指令就需要注意了,本文档将讲述其中原因。

stm32中的浮点数

浮点数总结 1.浮点数原理简介 1.1IEEE浮点表示 IEEE浮点标准用V=(-1)^s*M*2^E的形式来表示一个数: 符号(sign)s是符号位,1表示负,0表示正 阶码(exponent)E的作用是对浮点数加权,这个权重是2的E次幂,取值范围(单精度-128~127,双精度-1024~1023) 尾数(significand)M是一个二进制小数,它的范围是1~2-ε,或者是0~1-ε 规格化数:阶码的位不全为0也不全为...

qq_25355591的博客 1万+

底层工作者手册之嵌入式操作系统内核4.3

Mindows更新到4.3节看,增加任务的delay状态,更多资料请登陆www.ifreecoding.com下载。 Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字节,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将Wanlix和Mindows的开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核

【网络安全】Centos7安装杀毒软件----ClamAV

Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。

你在看屏幕的同时,屏幕也在注视着你 8828

底层工作者手册之嵌入式操作系统内…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 我在写本手册前没有任何有关操作系统内核的知识,有的仅仅是简单的使用过2个操作系统的经验,也仅限于对操作系统应用层一些功能的简单了解。我在写操作系统内核时也只能从这些应用经验出发,参考一些资料,更多的是自己想办法用最顺其自然的代码实现操作系统的这些内核功能。因此,你要相信,既然我能在

ifreecoding的博客 1707

第4章第2节&nbsp;定时器触发的实时抢占…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 本节中新增的重要内容已经介绍的差不多了,下面我们来看看使用tick中断的任务上下文切换过程。 在本节中,tick中断被配置为使用Timer1产生IRQ中断。产生tick中断时,硬件会自动将PC指针指向I

ifreecoding的博客 518

手写数字数据集MNIST

文章目录一、 简介二、下载MNIST数据集训练集和测试集的长度输出图像数据和标记数据的形状显示手写数字图片输出数据集中的第1个样本显示图片 一、 简介 MNIST是一个非常有名的手写体数字识别数据集(手写数字灰度图像数据集),在很多资料中,这个数据集都会被用作深度学习的入门样例。 MNIST数据集是由0到9的数字图像构成的。训练图像有6万张,测试图像有1万张。MNIST数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。由250个不同的人手写而成。 每一张图

qq_37289115的博客 1万+

数据分析:美团大赛的具体案例制作

在数据集中,存在三个变量的经纬度数据,分别是商家的经纬度数据('sender_lng', 'sender_lat'),顾客的经纬度数据('recipient_lng', 'recipient_lat')和骑手的经纬度数据('grab_lng', 'grab_lat')。根据结果可知,平台订单创建时间的中位数为2022-10-21 02:59:01,平台订单创建时间的众数为2022-10-19 03:29:41、2022-10-23 03:29:47,与直方图相符。接下来,我们对是否为预定订单变量进行分析。

m0_68269346的博客 2496

第3章第5节&nbsp;发布Wanlix操作系统

​源代码请在https://github.com/ifreecoding/MbedRtos.git下载 第5节发布Wanlix操作系统 经过前面3.1~3.3节循序渐进的开发,我们已经使Wanlix操作系统具备了最基本的任务切换功能,并在3.4节使用Wanlix开发了一个交通红绿灯控制系统,到此为

ifreecoding的博客 813

从零开始学 PyTorch 7天路线图(完整可运行代码版)

本文提供了5天PyTorch入门教程的完整代码,涵盖从基础到实战的核心内容。Day1测试环境并介绍张量基础;Day2讲解常用张量操作;Day3演示自动求导机制;Day4实现完整线性回归模型;Day5构建MNIST手写数字识别全连接网络。所有代码可直接运行,包含GPU检测、梯度计算、模型训练和可视化等关键环节,帮助新手快速掌握PyTorch核心概念和典型应用场景。

IT老农民的博客 314

第4章第7节&nbsp;二进制信号量(一)

目前更新到5.3节,请在http://dl.dbank.com/c02ackpwp6下载5.3节的全部文档 本节源代码请在http://dl.dbank.com/c0fp2g5z9s下载   第7节 二进制信号量 某些资源在同一时刻只可以被一个任务操作,实时操作系统的任务抢占特性会导致这些资源可能被多个任务同时操作,从而产生错误。本节将讲述二进制信号量的原理,可以利用二进制信号量保护这些资源

ifreecoding的博客 2039

LLC电路细讲笔记(二)LLC谐振转换器:频率、增益与Q值的详细探讨

这本电子书通过详细分析LLC谐振转换器的工作原理、等效电路和增益公式,帮助读者深入理解如何设计和优化谐振转换器系统。通过这些公式和设计方法,工程师可以根据不同的应用需求调整参数,实现高效的电能转换。

weixin_43199439的博客 6881

YOLOv12改进策略【Neck】| arXiv 2024 MAFPN:多分支辅助特征金字塔网络 | 通过双向辅助融合与异构卷积机制,解决传统PAFPN多尺度特征融合不充分与小目标检测不足问题

本文记录的是利用MAFPN颈部结构改进YOLOv12的目标检测网络模型。通过引入双向辅助融合机制优化特征处理流程,在自底向上路径利用 SAF 模块融合主干浅层特征与颈部输出,并保留浅层空间信息,为小目标检测提供更丰富细节;自顶向下路径通过 AAF 模块建立密集连接,聚合浅层高 / 低分辨率层、同级层及前层特征,均衡各层通道数后实现多向梯度信息交互,增强中 / 大目标特征表达。将其应用到中,解决传统特征金字塔在多尺度信息整合中的不足,提升多尺度目标检测的精度与特征表达的丰富性。Multi-Branch Aux

Limiiiing的博客 1256

第4章第7节&nbsp;二进制信号量(三)

目前更新到5.3节,请在http://dl.dbank.com/c02ackpwp6下载5.3节的全部文档 本节源代码请在http://dl.dbank.com/c0fp2g5z9s下载   图53列出了多个不同状态的任务与这些调度表之间的关系,任务1被信号量sem1阻塞,处于非永久pend态,strDelayQue结构中的strQueHead节点被挂接到delay表,strTcbQue结构中的

ifreecoding的博客 647

详解vit_base_patch16_224

ViT-Base模型的核心思想是将输入图像划分为多个小块(patches),并使用Transformer架构来处理这些小块。具体来说,ViT-Base使用16x16像素的patch大小,输入图像的尺寸为224x224像素,这意味着每张图像将被划分为49个patch(22416×22416=14×14=19616224​×16224​=14×14=196个patch)。ViT-Base(ViT-B/16)通过将图像处理任务转化为序列处理任务。

具身机器人和通用AI 3227

Android&nbsp;:&nbsp;线程的结束,挂起…

原文地址:: 线程的结束,挂起和恢复(上)">Android : 线程的结束,挂起和恢复(上)作者:青青的草原洁白的云Android : 线程的结束,挂起和恢复(上) Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo   在Android应用的开发过程中, 我们有时候需要通过创建一个新的线程去完成一些任务。例如,我们去

sheng的博客 344

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

JBPM4.3&nbsp;自由流的实现

JBPM4.3 自由流的实现,需要的参数只有taskid   注明:instanceid为相对核心参数,建议在流程发起的时候保留 本流目标节点已知(已知条件为自由流使用过程中的常态),没有当作参数传,写死在码里了。 大家可以当作参数传进来 本函数的参数为Java的一个bean其中只适用到了其中getTaskid() 的方法,获取的值不言而喻! public void returnTask(Wo

yangyi1018的博客 588

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ZZULI_SummerPractice(6)&nbsp;&nbsp;POJ&nbsp;194…

D - Chores p Time Limit: 3000MS Memory Limit: 30000K 64bit IO Format: %I64d & %I64u [Submit]   [Go Back]   [Status] Description Farmer John's family pitches in with the chores during milk

算法之道 332

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

转&nbsp;java&nbsp;1.5&nbsp;线程池&nbsp;基础

从 Java 5 开始,Java 提供了自己的线程池。线程池就是一个线程的容器,每次只执行额定数量的线程。 java.util.concurrent.ThreadPoolExecutor 就是这样的线程池。它很灵活,但使用起来也比较复杂,本文就对其做一个介绍。   首先是构造函数。以最简单的构造函数为例: public ThreadPoolExecutor(                in

nihousheng的专栏 307

编译原理笔记6&nbsp;词法分析程序

1.正规式与有限自动机之间的关系。——有限自动机M向正规式阿尔法的转换。1)把状态转换图的概念拓展,令每条弧上都可以用一个正规式作标记。2)在M的转换图上加两个结点:x,y。从x用一颗塞隆弧连接到M的所有初态结点;从M的终态结点用一颗塞隆弧连接到y。这个新的NFA为M’,且L(M)=L(M')3)通过引入的3条有限自动机替换规则逐步消去M’中的所有结点,直到只剩下x和y为止。这样,在x至y的弧线上

雪地车的博客 669

linux&nbsp;&nbsp;&nbsp;getopt函数

原文地址:  getopt函数">linux   getopt函数作者:陨v落Linux程序设计——用getopt处理命令行参数 Linux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。getopt()是一个

极客剑 791

我的linux学习10&nbsp;例行命令

cron:例行任务,工作持续干下去。 at:工作执行一次就从linux系统任务分配中取消。 首先开启atd服务(使用root权限):/etc/init.d/atd restart 设置开机启动:chkconfig --level 35 atd on 先找/etc/at.allow,写作这个文件中的用户才能使用at,如果没有这个文件则找/etc/at.deny,写在里面的用户不能使用at,如

zhexiao 476

WebQuest(网络探究)学习&nbsp;模式

本文转载自:http://www.cst21.com.cn/2/wq-webquest.htm    WebQuest课程是1995年由美国圣地亚哥州立大学教育技术系伯尼.道格(Berbie.Dodge)和汤姆.马奇(Tom.March)创立,目前全球已有数以千计的教室建立了自己的WebQuest课程网页,并在课堂教学中广泛开展了实践。在圣地亚哥州立大学网站(http://edweb.sdsu.e

linzi0的专栏 2042
上一篇: 第4章第5节&nbsp;任务创建和任务删除钩…
下一篇: 第4章第7节&nbsp;二进制信号量(一)
ifreecoding
博客等级 码龄15年 148粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值