????????Linux系统编程中的信号有几个属性,信号的类型,信号是否可被打断,信号处理函数处理完后的动作,系统提供了对这几个方面进行控制的几个函数和对应的结构体,结构体数据用于填充参数,函数用于设置到系统中生效配置。举个形象的例子:就像是按照客户需求生成了订单,函数的作用就是按照这个订单去安排生产,生产设备就是我们的操作系统,系统编程的整个过程就像是生成订单,根据订单内容使用函数安排操作系统的设置进行生产的过程,我们手里的计算机就是做这个事情的专用工具,计算机的可编程存储设计极大的解放了生产力,是又一次的工业革命,将带来面目一新的生产方式,网络用于程序间的通讯和数据交互,将全球的生产链和消费链连成一个整体。让社会运作更加的高效,人们获取各种资源更加便捷,并且节约了获取资源的成本和难度。
????????学习编程一定要类比我们身边实际的问题和场景,这样有助于完善对编程的理解,里面很多晦涩的概念也会因为在现实生活中找到类似的场景而变得非常容易理解。
? ? ? ? 信号算是一个比较难以理解的概念,在系统编程中的应用也很广泛,理解信号的作用有助于我们理解信号有哪些可以设置的属性,并发现设置这些属性的原因。
????????总之,学习计算机不是照本宣科的读死书,而是重温计算机软件,硬件设计的艺术和生活来源,理解计算机的软件和硬件设计合理性和局限性。
? ? ? ? 信号处理函数:
? ? ? ? ? ? ? ? void sig_handler(int sig){
? ? ? ? ? ? ? ? ? ? ? ?......
????????????????}
? ? ? ? ? ? ? ? int main(int argc, char **argv){
? ? ? ? ? ? ? ? ? ? ? ? signal(SIGINT, sig_handler);
? ? ? ? ? ? ? ? ? ? ? ? return 0;
????????????????}
????????上面是一个最简单的信号处理函数示例,只是设置了某个信号对应的自定义函数,并没有设置信号是否可被中断,也没有设置信号处理函数执行完后,是否恢复默认的信号处理动作。这两个可配置的属性需要通过信号集数据结构和sigaction函数来完成设置动作,看到这里或许就理解信号的各个属性和对应的设置工具的关系了,理解了这个关系才能很好的使用工具在合适的时机使用合理的设置,具体的代码并不复杂,但仅仅看代码是不足够的,希望看到这里的同学在学习编程的过程中更加注重知识的关联性和产生根源,多思考,勤总结是学习的不二法门。
|