Заголовки для функций C POSIX - PullRequest
6 голосов
/ 11 ноября 2011

Где или как найти правильные заголовки C для включения в программу C ++ для получения объявления функций C, объявленных в среде, совместимой с POSIX?

Я спрашиваю об этом, потому что мне нужно было использоватьopen() системный вызов в моей программе на C ++ для моих целей, поэтому я сначала попытался включить заголовки, упомянутые в онлайн-документации о open() (в разделе SYNOPSIS), которые sys/stat.h и fcntl.h.Однако при попытке компиляции компилятор жаловался, что open() не было объявлено.После поиска в Google, я обнаружил, что другая возможность была unistd.h.Я попытался использовать этот заголовок и программа скомпилирована.Поэтому я вернулся к документации по POSIX, чтобы узнать больше о unistd.h, чтобы проверить, упоминалось ли там open(), но я ничего не смог найти по этому поводу.

Что я делаю не так?Почему существует такое расхождение между документацией POSIX и моей средой GCC?

1 Ответ

9 голосов
/ 11 ноября 2011

На моем Linux Debian / Sid страница man 2 open сообщает:

SYNOPSIS
   #include <sys/types.h>
   #include <sys/stat.h>
   #include <fcntl.h>

Так что вам нужно включить все три выше файлов . И open объявлен в /usr/include/fcntl.h, но нуждается в объявлении из двух других включений.

И следующий тестовый файл

/* file testopen.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int
testopen (void)
{
  return open ("/dev/null", O_RDONLY);
}

компилируется с gcc -Wall -c testopen.c без каких-либо предупреждений.

...