我写了一个Linux驱动程序,想读取一块内存。我想用try&catch包装它-以防万一我要访问的内存不可用。
我该如何在C语言中做到这一点?
即
for(i=0;i<base_address.len/sizeof(unsigned); ++i)
{
seq_printf(seq, "0x%x ",((const volatile unsigned*)base_address.iobase[i]);
}
我想保护对此内容的访问- base_address.iobase [i] ,因为我不确定范围中的所有位都可以访问。
答案 0 :(得分:2)
简短答案-您不。
C没有像C ++那样提供try / catch机制。取而代之的是,您需要检查每个调用的结果,并在返回标准C习惯时尽早进行自己的清理。
查看其他驱动程序以遵循模式;不要尝试发明与内核其余部分不同的机制(那样只会导致混乱和痛苦!)。
答案 1 :(得分:0)
事实上,Linux内核中有一个类似try-catch的工具。它称为exception table
,可以在Linux源代码的kernel/extable.c
中找到。基本上,您使用_ASM_EXTABLE*
中定义的arch/x86/include/asm/asm.h
宏之一(假设您使用的是x86平台)。
它的工作方式是提供错误的指令-即try
部分-和fixup
地址-catch
部分。 try/catch in Linux Kernel中对此进行了更详细的描述。