Я конвертирую некоторый код C для малины Pi 3B в C++. Эта часть кода С,Заменить сопоставление памяти C с эквивалентами C++
// Open /dev/mem
if ((p->mem_fd = open("/dev/mem", O_RDWR|O_SYNC)) < 0) {
printf("Failed to open /dev/mem, try checking permissions.\n");
return -1;
}
p->map = mmap(
NULL,
BLOCK_SIZE,
PROT_READ|PROT_WRITE,
MAP_SHARED,
p->mem_fd, // File descriptor to physical memory virtual file '/dev/mem'
p->addr_p // Address in physical map that we want this memory block to expose
);
представляет собой сложную задачу. Непосредственная проблема связана с дескриптором файла, возвращаемым функцией C open. C++ использует fstream, который будет работать для открытия файла, но когда я доберусь до функции C mmap, у меня нет файлового дескриптора.
mmap отображает файлы в память.
Это учебный эксперимент, и я хотел бы придерживаться C++.
Это вопрос. RPi OS, Raspbian, имеет встроенные все эти функции C. Имеет ли он также встроенные эквиваленты C++ или ожидается, что один использует функции C и, возможно, оператор extern "C"
?
C++ - это почти строгий надмножество C (см. [Здесь] (http://stackoverflow.com/questions/1201593/c-subset-of-c-where-not-examples)). Хотя вы можете преобразовать это в C++, он также может оставаться как C. –
@EliSadoff: Это неправильно! C++ не является даже «почти» строгим надмножеством C. Существует множество часто используемых идеомов, которые имеют разные семантики на обоих языках. Это могло бы отличаться от стандарта C и современного C99, но это совершенно неправильно с 17 лет. – Olaf
@Olaf Я явно связан с (неисчерпывающим) списком раз, когда это неверно. «Почти» - субъективное определение, и для целей этого вопроса этот код действителен как для C, так и для C++. –