中断其实就是由硬件或软件所发送的一种称为IRQ(中断请求)的信号。 中断允许让设备,如键盘,串口卡,并口等设备表明它们需要CPU。 一旦CPU接收了中断请求,CPU就会暂时停止执行正在运行的程序,并且调用一个称为中断处理器或中断服务程序(interrupt service routine)的特定程序 ...
分类:
系统相关 时间:
2017-07-08 20:22:05
阅读次数:
298
什么是信号? 信号是 Linux 进程间通信的最古老的方式。信号是软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式 。信号能够导致一个正在执行的进程被还有一个正在执行的异步进程中断,转而处理某一个突发事件。 “中断”在我们生活中常常遇到。譬如,我正在房间里打游戏。突然送快递的来了 ...
分类:
系统相关 时间:
2017-06-17 21:46:08
阅读次数:
316
学会使用libevent,才能真正的掌握其是实现原理,我们先从一个简短的测试用例开始: 该代码的大体意思是:添加一个信号中断事件,通过CTRL+C,产生中断信号,再调用中断处理函数。 首先分析的是函数是event_init函数,现帖出其具体实现方式 ...
分类:
其他好文 时间:
2017-05-26 23:25:46
阅读次数:
392
线程标识 创建、退出、等待、取消线程 线程属性 可重入和线程安全 线程安全:多个线程可以同时的、安全的调用同一个函数 重入:例如 main() 调用 malloc() 时产生信号,中断原有流程,进入信号处理函数,信号处理函数中再次调用 malloc(),称为重入。从栈帧上说,malloc() 出现了 ...
分类:
编程语言 时间:
2017-05-26 14:34:27
阅读次数:
198
转自:https://my.oschina.net/u/1024767/blog/210801 v4l2 操作实际上就是 open() 设备, close() 设备,以及中间过程的 ioctl() 操作。对于 ioctl 的调用,要注意对 errno 的判断,如果调用被其他信号中断,即 errno ...
分类:
其他好文 时间:
2017-05-25 18:22:03
阅读次数:
209
EINTR 表示某种阻塞的操作,被接收到的信号中断,造成的一种错误返回值。 EAGAIN 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果 ...
分类:
系统相关 时间:
2017-02-25 20:00:45
阅读次数:
174
在信号处理程序中经常调用longjmp函数以返回到程序的主循环中,而不是从该处理程序返回。 但是,调用longjmp有一个问题。当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被自动地加到进程的信号屏蔽字中。这阻止了后来产生的这种信号中断该信号处理程序。(仅当从信号捕捉函数返回时再将进程的信号屏蔽 ...
分类:
其他好文 时间:
2017-01-28 15:53:29
阅读次数:
226
网络编程不只是编写网络、主机、进程都正常时能良好工作的进程,更重要的是客户主机崩溃、客户进程崩溃网络异常时怎么处理。 accept被信号中断 accept以及套接字上的I/O可能被信号打断,并返回EINTR作为结果,必须处理该返回值并且适当时候再次调用。 for(;;) { if(connfd = ...
分类:
其他好文 时间:
2016-07-08 16:34:11
阅读次数:
222
IO模型:
(1)阻塞式IO模型:
最流行的I/O模型是阻塞式I/O模型,默认情况下,所有的套接字都是阻塞的。
如上图所示,进程调用recvfrom,其系统调用直到数据报到达且被复制到应用进程的缓冲区中或发生错误才返回。最常见的错误是系统调用被信号中断,我们说进程在从调用recvfrom开始到它返回的整段时间内是被阻塞的。recvfrom成功返回后,应用进程开始处理...
分类:
其他好文 时间:
2016-06-12 03:32:04
阅读次数:
148
最近在公司项目中突然报错如下 “connect: Interrupted system call”, 经过查找代码发现是在创建 socket 中执行了 connect 函数失败导致。上网查阅资料发现这是 信号中断EINTR 与 慢系统调用 的问题。 慢系统调用:可能永远阻塞的系统调用。 EINTR说 ...
分类:
其他好文 时间:
2016-05-11 19:37:57
阅读次数:
218