Я включил следующие заголовки:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
Я также пытался использовать
#define _GNU_SOURCE
до #include <unistd.h>
, но и это не помогает.
Я пытаюсь использовать fcntl
и передать его F_SETPIPE_SZ
в качестве второго аргумента, но продолжаю получать это сообщение об ошибке:
ошибка: ‘F_SETPIPE_SZ’ необъявлено (первое использование в этой функции)
Я на самом деле узнал, что мне это не нужно, но мне просто любопытно, почему я не могу его использовать.
Спасибо.
Итак, вот решение, благодаря Chrono Kitsune: поставить
#define _GNU_SOURCE
перед любым включением.
fcntl
. Можете ли вы опубликовать это в своем вопросе? - person Fiddling Bits   schedule 20.08.2014#define _GNU_SOURCE
перед включением каких-либо заголовков. Сомневаюсь, что поможет, но сказать стоит. Что показываетuname -r
? Если он меньше 2.6.35, у вас не должно бытьF_SETPIPE_SZ
. Страница руководства, которая у меня есть, документирует, что она доступна, начиная с Linux 2.6.35. - person   schedule 21.08.2014_GNU_SOURCE
— это макрос тестирования функций Linux glibc (man feature_test_macros
), так же как и_POSIX_C_SOURCE
и_XOPEN_SOURCE
, вполне разумно просто определить макрос для каждого файла до включения каких-либо заголовков. На странице руководства конкретно указано, что это разрешено. Важным моментом является определение его до того, как будут включены какие-либо заголовки, то есть либо в командной строке, либо в файле. - person   schedule 21.08.2014