Unix中是否有类似于IsBadReadPtr的函数至少IsBadReadPtr的一些功能?
我想写一个过程,如果一个进程(如SIGSEGV
)发生了不好的事情,它会做出反应,并恢复一些信息。但我想检查指针以确保数据没有损坏,并查看它们是否可以安全访问否则,崩溃处理过程本身就会崩溃,从而变得毫无用处。
有什么建议吗?
最佳答案
在POSIX系统上,通常的方法是使用write()
系统调用如果无法读取存储器,它将在EFAULT
中返回errno
,而不是发出信号:
int nullfd = open("/dev/random", O_WRONLY);
if (write(nullfd, pointer, size) < 0)
{
/* Not OK */
}
close(nullfd);
(
/dev/random
是一个很好的设备,可以在Linux上使用,因为它可以由任何用户编写,并且实际上会尝试读取给定的内存。在没有/dev/random
或不可写的操作系统上,尝试/dev/null
)另一种替代方法是匿名管道,但如果要测试大区域,则需要定期清除管道的读取端。关于c - Unix上的IsBadReadPtr类似物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4611776/