mmap在错误期间返回值

时间:2015-06-21 12:13:15

标签: c mmap

我可以在mmap手册页中看到错误条件期间的返回值为(void *)-1.

c编译器如何在常量之前处理(void *),这里-1

以下代码片段是检查mmap错误值的正确方法吗?

int *p;
p = (int *)mmap();
if(p == -1)
        printf("error \n");

我们是否需要使用以下错误条件检查。

if(*p == -1)
        printf("error \n");

1 个答案:

答案 0 :(得分:4)

int *p = NULL;
void *ret = mmap();
if(ret == MAP_FAILED) {  /* Or if(ret == (void *)-1) */
  /* error */
} else {
  p = ret;
}

使用(void *)-1字面检查或使用MAP_FAILED定义的(void *)-1宏。

if(*p == -1)不正确,因为除非确保指针的有效性,否则无法取消引用指针。否则,程序的行为是未定义的。