sys / sendfile.h не найден GCC - PullRequest
       15

sys / sendfile.h не найден GCC

3 голосов
/ 24 ноября 2011

Я использую Mac OS 10.6.7,

Компилятор gcc уже был там, когда я купил Mac. но когда я пытаюсь включить sys / sendfile.h #include<sys/sendfile.h>

выдает ошибку

sys/sendfile.h: No such file or directory.

Но эта программа корректно работает в Ubuntu GCC Compiler. Есть идеи как это исправить?

Ответы [ 4 ]

4 голосов
/ 24 ноября 2011

Согласно странице руководства Linux :

Не указано в POSIX.1-2001 или других стандартах.

В других системах UNIX реализован sendfile () с различной семантикой и прототипами.Его нельзя использовать в переносимых программах.

Я не уверен насчет OSX, но, похоже, вам нужно немного покопаться, чтобы найти его.

3 голосов
/ 24 ноября 2011

sendfile () - это, в конечном счете, возможность ядра, а не библиотеки или компилятора, и, если процитировать man-страницу linux: «Другие системы Unix реализуют sendfile () с другой семантикой и прототипами. Его не следует использовать в переносимых программах».

Похоже, что здесь находится man-страница для OSX sendfile (): https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man2/sendfile.2.html

И действительно, предупреждение man-страницы linux является точным - прототипы разные:

OSX:

int sendfile(int fd, int s, off_t offset, off_t *len, struct sf_hdtr *hdtr, int flags);

Linux:

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

Так что вам придется переписать.

OSX включает в себя на этой странице руководства, но для полноты:

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
3 голосов
/ 24 ноября 2011

Вы ищете sendfile(2)? Если это так, это не в sys/sendfile.h:

Библиотека разработчика OS X гласит, что вы должны включить их:

 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
2 голосов
/ 24 ноября 2011

В OSX sendfile определяется в socket.h. Поэтому вам нужно включить socket.h вместо sys / sendfile.h

...