Используйте вариативные функции C в Go

Я использую shm_open с cgo. shm_open определяется с 3 аргументами в Linux

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

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

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

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

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


person Erik Aigner    schedule 21.11.2013    source источник


Ответы (1)


Как обычно, откровение приходит через 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"
person Erik Aigner    schedule 21.11.2013