2016-10-13 15 views
0

У меня есть поиск, и я не могу найти способ использования mmap. Это то, что у меня есть ..Как использовать mmap в c

char *pchFile; 
if ((pchFile = (char *) mmap (NULL, fileSize, PROT_READ, MAP_SHARED, fd, 0)) == (char *) -1){ 
    fprintf(stderr, "Mmap Err: \n"); 
    exit (1); 
} 

Итак, как же я от получения pchFile, прочитанный из файла? Является ли pchFile массив байтов, отображенный из mmap? Как читать при смещении, например, 400 байтов? Могу ли я иметь смещение и читать только определенную сумму, например, читать только 100 байтов?

ответ

1

pchFile - просто обычный старый char *fileSize действительными байтами). Поэтому, если вам нужен указатель на данные со смещением 400 байт, вы можете просто использовать &pchFile[400] или pchFile + 400 для неявной или явной арифметики указателя.

Как вы ограничиваете это до 100 байт на основе API, который вы используете; Сам C не имеет понятия «длины» указателя (есть API-интерфейсы для строк с нулевым завершением, но исходные данные файла вряд ли имеют нулевые значения в полезных местах). Для memcpy/memcmp и друзья, вы должны передать &pchFile[400] в качестве источника и передать размер 100. Для инициализации C++ vector вы должны передать указатели начала и конца конструктору, например. std::vector<char> myvec(&pchFile[400], &pchFile[500]); и т. Д. Обычно это будет либо указатель начала, либо длина, либо указатель начала и конца.