`
hyshucom
  • 浏览: 811685 次
文章分类
社区版块
存档分类
最新评论

使用longjmp,带超时限制调用read

 
阅读更多
//Set max timeout when block reading
// by Jay Zhang

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <setjmp.h>

static void sig_alarm(int);
static jmp_buf env_alarm;

#define MAXLINE	1024

int main(void)
{
	int n;
	char line[MAXLINE];

	if(signal(SIGALRM, sig_alarm) == SIG_ERR) {
		printf("signal SIGALARM error\n");
		return -1;
	}
	if(setjmp(env_alarm) != 0) {
		printf("read timeout\n");
		return 0;
	}

	alarm(10);
	if((n = read(STDIN_FILENO, line, MAXLINE)) < 0) {
		printf("read error\n");
	}
	alarm(0);

	write(STDOUT_FILENO, line, n);
	return 0;
}

static void
sig_alarm(int signo)
{
	longjmp(env_alarm, 1);
}

分享到:
评论

相关推荐

    使用setjmp,longjmp函数模拟多任务实时操作系统

    使用c标准库里面的setjmp,longjmp来模拟嵌入式操作系统中的任务。可以在单线程里面运行多个任务。在vc6.0中调试通过。对深入了解嵌入式多任务环境很有帮助

    用 setjmp 和 longjmp 实现多线程(1)_多线程_

    用 setjmp和longjmp 实现多线程介绍

    setjump与longjmp(异常处理机制)

    setjump与longjmp(异常处理机制) 非常全面

    setjmp和longjmp详细介绍

    关于setjmp和longjmp的详细介绍,可以实现类似异常处理。等等,以及使用时注意事项,和goto的差别

    c标准异常处理-全面了解setjmp与longjmp的使用[参照].pdf

    c标准异常处理-全面了解setjmp与longjmp的使用[参照].pdf

    浅析C语言中的setjmp与longjmp函数

    setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。 先来看一下这两个函数的定义吧: setjmp和...

    Delphi 自动垃圾回收示例与源代码

    Delphi 自动垃圾回收示例与源代码 主要的源代码是C的 Delphi下调用C写的Dll已封装好,并有例子。 是Delphi下用boehm-gc实现自动垃圾回收的很棒例子。 怎么用请直接看GCTest的源代码即可了解了。

    ConsoleApplication1-第二版.zip

    使用setjmp longjmp两个函数实现伪线程调用,细节参考CSDN链接 https://blog.csdn.net/ai5945fei/article/details/122221627

    使用C语言实现各种数据结构与运算算法

    包含了不透明指针,断言处理时机,二级指针的用法,宏定义,复杂结构体,setjmp/longjmp,数据结构常见算法(可惜没有二叉树),以及精度计算,高级字符串使用,初学者可以直接使用其接口,并观察其事例代码,提高者...

    myOs-STM32.rar

    基于longjmp单片机程序框架

    UNIX环境高级编程_第二版中文

    7.10 setjmp和longjmp函数  7.11 getrlimit和setrlimit函数  7.12 小结  习题  第8章 进程控制  8.1 引言  8.2 进程标识符  8.3 fork函数  8.4 vfork函数  8.5 exit函数  8.6 wait和waitpid...

    UNIX高级编程 计算机科学丛书

    2. 不带缓存的I/O(第三章)、文件和目录(第四章、标准I/O库(第五章)以及系统数据文件(第六章)。 3. 进程—Unix进程的环境(第七章)、进程控制(第八章)、进程之间的关系(第九章)以及信号(第十章)。 ...

    21-proc.rar

    Linux&UNIX;系统编程手册源码副本

    userthreads:使用CPOSIX在userland上实现的线程-无汇编程序

    C / POSIX便携式用户态线程这是我前一段时间做的一个微型项目/概念验证。 它需要进行一些清理和抛光,... 但这有问题: longjmp不是异步安全函数,因此不应从信号处理程序中调用它。 好吧,好的,看起来在2012年longjmp

    UNIX环境高级编程(第二版中文)

    7.10 setjmp和longjmp函数 159 7.11 getrlimit和setrlimit函数 164 7.12 小结 168 习题 168 第8章 进程控制 171 8.1 引言 171 8.2 进程标识符 171 8.3 fork函数 172 8.4 vfork函数 176 8.5 exit...

    unix环境编程电子书

    28 2.4 标准和实现的关系 28 2.5 限制 29 2.5.1 ISO C限制 29 2.5.2 POSIX限制 30 2.5.3 XSI限制 32 2.5.4 sysconf、pathconf和fpathconf函数 32 2.5.5 不确定的运行时限制 38 2.6 选项 42 2.7 ...

    UNIX环境高级编程

    7.10 setjmp和longjmp函数 159 7.11 getrlimit和setrlimit函数 164 7.12 小结 168 习题 168 第8章 进程控制 171 8.1 引言 171 8.2 进程标识符 171 8.3 fork函数 172 8.4 vfork函数 176 8.5 exit...

    UNIX环境高级编程部分

    7.10 setjmp 和longjmp函数 7.10.1 自动, 寄存器和易失变量 7.10.2 自动变量的潜在问题 7.11 getrlimit 和setrlimit函数 7.12 小结 习题 第8章 进程控制 8.1 引言 8.2 进程标识 8.3 fork函数 8.4 vfork 函数 8.5 ...

Global site tag (gtag.js) - Google Analytics