В стандарте POSIX интерфейс C для open()
объявлен как:
int open(const char *path, int oflag, ...);
Теперь вы должны предоставить только один дополнительный аргумент, но ничего неткомпилятор может сделать, чтобы вы не предоставили больше.Если вы компилируете с C ++, возможно, вы перегружены объявлениями open()
:
int open(const char *path, int oflag);
int open(const char *path, int oflag, mode_t mode);
Это будет более точно отражать то, что ожидается.Определенно, есть некоторые проблемы, которые необходимо решить, реализуя это, но это может быть сделано.
Итак, компиляция, вероятно, работала на одной машине, потому что она использовала «официальное» объявление со списком аргументов переменной длины.В вашей системе вы, кажется, более ограничены.
Оригинальный код не работает.Почини это.И исправьте это в новом коде.