Linux Linux程序练习十三(信号阻塞,捕获)
/*
* 题目:
* 请编写一个程序,设置SIGINT和SIGQUIT信号,
* 并在该程序中实现从文件中读取信息的操作,
* 并保证在读取文件且只有在读取文件的过程中不会被发送的SIGINT和SIGQUIT信号所打断。
* 提示:在文件读取前阻塞信号,在文件读取后解除阻塞。
* */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h> #include <signal.h> int read_file(const char *path)
{
if (path == NULL)
{
printf("param not allow NULL!\n");
return -;
}
FILE *pfr = NULL;
pfr = fopen(path, "r");
if (pfr == NULL)
{
printf("fopen() failed ! file path:%s;error message:%s\n", path,
strerror(errno));
return -;
}
char buf[] = { };
while (fgets(buf, sizeof(buf), pfr) != NULL)
{
printf("%s", buf);
sleep();
memset(buf, , sizeof(buf));
}
fclose(pfr);
return ;
} void handler(int sign)
{
if (sign == SIGINT)
{
printf("accept SIGINT !\n");
} else if (sign == SIGQUIT)
{
printf("accept SIGQUIT !\n");
} else
{
printf("accept other sign !\n");
}
} int main(int arg, char *args[])
{
if (arg < )
{
printf("print file name!\n");
return -;
}
struct sigaction act;
act.sa_handler = handler;
//初始化信号集
sigemptyset(&act.sa_mask);
act.sa_flags = ;
//安装(注册)SIGINT和SIGQUIT信号
if (sigaction(SIGINT, &act, NULL) != )
{
printf("sigaction() failed !\n");
return -;
}
if (sigaction(SIGQUIT, &act, NULL) != )
{
printf("sigaction() failed !\n");
return -;
}
//阻塞信号
sigset_t bset;
//清空信号集
sigemptyset(&bset);
//将信号SIGINT和SIGQUIT添加到信号集中
sigaddset(&bset, SIGINT);
sigaddset(&bset, SIGQUIT);
//更改进程信号屏蔽状态字
if (sigprocmask(SIG_BLOCK, &bset, NULL) != )
{
printf("sigprocmask() failed !\n");
return -;
}
read_file(args[]);
//解除阻塞
if (sigprocmask(SIG_UNBLOCK, &bset, NULL) != )
{
printf("sigprocmask() failed !\n");
return -;
}
while()
{
pause();
}
return ;
}
Linux Linux程序练习十三(信号阻塞,捕获)的更多相关文章
- linux系统编程之信号(五):信号集操作函数,信号阻塞与未决
一,信号集及相关操作函数 信号集被定义为一种数据类型: typedef struct { unsigned long sig[_NSIG_WORDS]: } sigset_t 信号集用来描述信号的集合 ...
- Linux 信号详解五(信号阻塞,信号未决)
信号在内核中的表示 执行信号的处理动作成为信号递达(Delivery),信号从产生到递达之间的状态称为信号未决(Pending).进程可以选择阻塞(Block)某个信号. 被阻塞的信号产生时将保持在未 ...
- linux信号--阻塞与未决
执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending). 进程可以选择阻塞(Block)某个信号.被阻塞的信号产生时将保持在未决状态,直到进程解 ...
- linux备忘录-程序管理与SELinux
知识点 程序与程序(Process and Program) 通过执行一条指令或程序,则可以触发一个事件,并获得一个PID.当我们需要启动一个程序时,我们是启动一个二进制文件(binary file) ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- Linux系统编程——进程间通信:信号中断处理
什么是信号? 信号是 Linux 进程间通信的最古老的方式.信号是url=474nN303T2Oe2ehYZjkrggeXCaJPDSrmM5Unoh4TTuty4wSgS0nl4-vl43AGMFb ...
- linux应用程序开发-文件编程-系统调用方式
在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...
- 配置开发支持高并发TCP连接的Linux应用程序全攻略
http://blog.chinaunix.net/uid-20733992-id-3447120.html http://blog.chinaunix.net/space.php?uid=16480 ...
- Linux C 程序 进程控制(17)
进程控制 1.进程概述现代操作系统的特点在于程序的并行执行.Linux是一个多用户多任务的操作系统.ps .pstree 查看进程进程除了进程id外还有一些其他标识信息,可以通过相应的函数获得.// ...
- Linux 高性能服务器编程——Linux服务器程序规范
问题聚焦: 除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范. 工欲善其事,必先利其器,这篇主要来探 ...
随机推荐
- IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序
前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...
- MVC3异常处理的方法
1.采用内置的HandleErrorAttribute对象,跳转到指定错误页 示例:http://www.cnblogs.com/TomXu/archive/2011/12/15/2285432.ht ...
- yii2 gridview 是否显示某列案例
作者:白狼 出处:http://www.manks.top/article/yii2_gridview_visible 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- 修改Mac系统的默认截图保存路径到指定目录
注:此文仅针对mac系统如果你是mac用户,会发现桌面经常一团糟,桌面到处都是平时的截图(mac系统的截图是command+shift+3 和 command+shift+4 两个快捷命令) 之前一直 ...
- 继续说一下openjson 以及 json path 的使用 (2)
在openjson 里面,其实是可以把数据类型array里面的值遍历出来的,举个栗子 ) = N' {"name":"test", "obj" ...
- CSS3之让背景图片全部显示
起初是在处理一个图片显示的问题, 图片没有有一部分没有显示出来, 之后用到了background-size, 发现有必要总结一下. background-size 首先声明 background-si ...
- Tomcat源码分析之—具体启动流程分析
从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...
- shell脚本实现随机筛选
#!/bin/bash name=(val1 val2 val3 val4 ...) a=$() #以时间产生随机数向39取余得到0~38的值
- (转)Yii的组件机制之一:组件基础类CComponent分析
Yii的组件机制 组件机制,是Yii整个体系的思想精髓,在使用Yii之前,最应该先了解其组件机制,如果不了解这个机制,那么阅读Yii源代码会非常吃力.组件机制给Yii框架赋予了无穷的灵活性和可扩展性, ...
- android WebView网页浏览器
组件位置:composite>WebView .xml <WebView android:id="@+id/webview_pipeweb" android:layou ...