摘要:
信号不仅可以用来处理异步事件,也可以用来传递数据。 利用函数sigaction跟sigqueue来实现进程间的数据传递。 程序1:发送数据 程序2:接收数据 整型数据从进程1传递给了进程2 阅读全文
摘要:
实际应用中,进程常常需要等待某一事件的发生,一般可以通过检测某一全局变量来判断事件是否发生。 有3种方法可以实现这一要求: 1、 程序不停的循环检查全局变量,这样可以满足要求,但是非常占用CPU资源。 2、 进程使用pause挂起,等待信号的触发,事件发生时向进程发送信号,对应的信号处理函数改变全局 阅读全文
摘要:
1、信号集 POSIX标准定义了数据类型sigset_t #include <signal.h> int sigemptyset(sigset_t *set); 初始化一个信号集,使其不包括任何信号 int sigfillset(sigset_t *set); 用来初始化一个信号集,使其包括所有信号 阅读全文
摘要:
1、kill函数 int kill(pid_t pid, int sig); 发送信号给指定的进程。 (1) If pid is positive, then signal sig is sent to the process with the ID specified by pid. 如果pid是 阅读全文
摘要:
由于在信号处理期间自动屏蔽了正在被处理的信号,而使用setjmp/longjmp跳出信号处理程序时又不会自动将 信号屏蔽码修改会原来的屏蔽码,从而引起该信号被永久屏蔽。 可以使用sigsetjmp/siglongjmp来解决这一问题。 int sigsetjmp(sigjmp_buf env, in 阅读全文
摘要:
信号处理函数可以正常返回,也可以调用其他函数返回到程序的主函数中,而不是从该处理程序返回。 正如ANSI C标准所说明的,一个信号处理程序可以返回或者调用abort、exit或longjmp(goto不支持跳出它所在的函数, 因此不能用来从信号处理程序返回到主函数中)。 int setjmp(jmp 阅读全文
摘要:
信号的捕捉和处理 主要由signal和sigaction函数来完成。还有一个函数pause,它可用来响应任何信号,不过不做任何处理。 1、signal函数 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sigha 阅读全文
摘要:
信号的来源,种类,进程对信号的响应。 信号的捕获,发送,屏蔽。 信号是一种软中断,它提供了一种处理异步事件的方式,也是进程间唯一的异步通信方式。根据POSIX标准扩展以后的信号机制,不仅可以 用来通知进程发生了什么事件,还可以给进程传递数据。 信号的来源: 1、硬件方式: 在终端按下某些键时,产生信 阅读全文
摘要:
1、错误检查: 头文件errno.h定义了变量errno,它存储了错误发生时的错误码,通过错误码可以得到错误的描述信息。 当函数调用失败时,errno的值才有意义。 2、错误码: 错误码是一些定义在errno.h中的宏: 3、错误的提示信息 char *strerror(int errnum); 根 阅读全文
摘要:
信号可以被进程用来相互通信。线程同进程一样也可以接收和处理信号,信号也是一种线程间同步的手段。 信号(SIGINT 和 SIGNO)与任何线程都是异步的,也就是说信号达到线程的时间是不确定的。如果有多个线程可以接收 异步信号,则只有一个被选中。如果并发的多个同样的信号被送到一个进程,每一个将被不同的 阅读全文