2013-11-21 3 views
4

Использую shm_open с помощью cgo. shm_open определяется с 3 аргументами на LinuxИспользование вариационных функций C в Go

int shm_open(const char *name, int oflag, mode_t mode); 

, тогда как на OSX (Darwin) флаг третий режим не является обязательным.

int shm_open(const char *name, int oflag, ...); 

Это создает проблему с CGO при попытке передать режим OSX. Он жалуется, что я передаю 3 аргумента, когда ожидаются только 2.

Как я могу обойти это?

ответ

5

Как обычно, откровение приходит через 1 секунду после публикации на SO. Фактически вы можете объявлять функции в разделе комментариев CGO, поэтому все, что вам нужно сделать, это использовать такую ​​оболочку.

/* 
#include <stdio.h> 

int shm_open2(const char *name, int oflag, mode_t mode) { 
    return shm_open(name, oflag, mode); 
} 
*/ 
import "C"