2013-05-31 3 views
1
#include <unistd.h> 
#include <fcntl.h> 

int exec[2]; 
int pipesize = 8192; 

if(pipe(exec) ==-1) { 
    perror("pipe"); 
    return -1; 
} 

fcntl(exec[1],F_SETPIPE_SZ,&pipesize); 

Я запускаю этот код, но я получаю сообщение об ошибке, когда F_SETPIPE_SZ не объявлен. Я использую Ubuntu 13.04, что может быть проблемой?Я пытаюсь изменить размер трубы с помощью F_SETPIPE_SZ, но при компиляции он говорит, что он не объявлен?

ответ

1

F_SETPIPE_SZ - конкретный Linux. Вам нужно добавить:

#define _GNU_SOURCE 

перед включением fcntl.h. Это описано в разделе , соответствующем разделу на странице руководства.

Обратите внимание, однако, что размер по умолчанию должен быть достаточным для большинства применений труб для IPC с одновременным чтением и записью, поскольку размер трубы имеет значение только для уменьшения переключения контекста. Если вам нужна большая труба, потому что вы храните данные в течение длительного времени (например, потому что читатель неактивен), вы должны подумать о переосмыслении своего решения с использованием временных файлов, так как очень большие трубы будут отбрасывать память ядра.