易截截图软件、单文件、免安装、纯绿色、仅160KB

linux 信号处理

曾做过signal相关的一点儿开发,谈谈我的一些理解。
首先,需要理解几个signal相关的函数。
  sigaddset(sigset_t* sigSet, int sigNum ) :  将信号sigNum 添加到信号集 sigSet 中;
  sigdelset(sigset_t* sigSet, int sigNum) : 将信号 sigNum 从信号集 sigSet 中删除;
  sigemptyset(sigset_t* sigSet) : 清空信号集;
  sigfillset(sigset_t* sigSet) : 在信号集中打开所有的信号。
但是这个时候只是定义好了如此一个信号集,还有对信号的操作函数:
   pthread_sigmask(int opCode, sigset_t* sigSet, sigset_t* oldSigSet) :
opCode 指定了如何对 sigSet 里的信号进行处理。opCode 有三个值: SIG_BLOCK
(将sigSet中的信号加到当前线程的屏蔽集中),SIG_UNBLOCK (将sigSet
中的信号从当前线程屏蔽集中删除),SIG_SETMASK (将sigSet 设为当前线程的屏蔽集)。 若oldSigSet !=
NULL,则将之前的信号屏蔽集存入其中。
   另外还有个函数 sigprocmask() 也有类似功能。区别是:pthread_sigmask()
是线程库函数,用于多线程进程。sigprocmask() 是旧的实现,用于单线程的进程。
  sigwait(sigset_t* sigSet, int* sigNum) : 当前线程等待 sigSet
中的信号。没有捕获到信号时,线程挂起;当捕获到时,函数返回,并将信号值存入 sigNum。
  sigaction(int sigNum, sigaction* newAct, sigaction* oldAct) :  捕获信号
sigNum,并调用相应的处理函数(定义在 newAct 中)。
  
虽然sigwait() 和 sigaction() 都是用于捕获信号,但两者还是有较大区别:sigwait()
是阻塞的,线程会一直挂起直到捕获到信号,并且对信号的处理是定义在
sigwait()后的,只会在当前线程内执行;而sigaction()是非阻塞的,当信号被捕获时,会由进程内当前被调度到的线程来执行处理函数(好
像是,not very sure...),被哪个线程处理是随机的。
所以,sigaction()适用于对实时性要求很高的时候。而在普通情况下建议使用sigwait(),因为其具有较好的可控性。
另外,还需要注意的是,SIG_KILL(大家应该都用过kill -9 吧) 和 SIG_STOP 是不能被用户屏蔽或捕获的。
好了,当理解了这几个函数后,可以自己试着来对信号进行处理了。对于lz的需求,简单举例如下:
  sigset_t blockSet, waitSet;
  int sigNum;


相关文档:

fedora下linux的安装

虽然mplayer的安装方法已经不是什么技术活,但最近有不少同学在询问我关于mplayer的安装方法的问题。我一贯推荐它们源代码包的安装,虽然步骤有些复杂,但解码器和二进制程序都尽在掌握,心里踏实。
===
1
下载如下这些软件:
all-20071007.tar.bz2
windows-all-20071007.zip
Blue-1.7.tar.bz2
MPlayer-1.0rc2.ta ......

statfs获得硬盘使用情况 模拟linux命令 df

说明:本文以主要为转载内容,同时加入了我在使用过程中遇到问题对其的修正!!!!!!!!!
先说statfs结构:
#include <sys/vfs.h>    /* 或者 <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
参数:   ......

Linux从源码安装subversion遇到问题及解决

Linux源码安装Subversion
先从subversion的官方网站下载源码,subversion.apache.org
解压开到subversion-xxx 然后configure
然后一般就是找不到某某库的错误,以下说明
1.找不到sqlite3
  从sqlite网站上下载sqlite3的源码,然后把sqlite3.c拷贝到 subversion-xxx/sqlite-amalgamation/sqlite3.c
2.找不到apr
......

Linux设备模型之input子系统详解(一)

------------------------------------------ 
本文系本站原创,欢迎转载! 
转载请注明出处:http://ericxiao.cublog.cn/ 
------------------------------------------ 
一:前言 
在键盘驱动代码分析的笔记中,接触到了input子系统.键盘驱动,键盘驱动将检测到的所有按键都上报给了input子系 ......

linux下的so、o、lo、a、la文件有什么区别?

o: 编译的目标文件
a: 静态库,其实就是把若干o文件打了个包
so: 动态链接库(共享库)
lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息
la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息
 
1 libtool的工作原理
libtool 是一个通用库支持脚本,将使用 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号