Chcę móc map pamięci do deskryptora pliku, aby można było korzystać z niektórych istniejących funkcji, które wymagają deskryptor pliku. Oto zasadniczo co szukam:wywołanie systemowe do odwzorowania pamięci na deskryptor pliku (odwrotność mmap)?
void do_operation1(int fd);
char data[DATA_MAX] = { /* embedded binary data */ };
int fd = addr_to_fd(data, DATA_MAX);
do_operation1(fd);
/* ... operate on fd ... */
rozmowy Jaki system, lub połączenia, można użyć do osiągnięcia tego celu?
Okazuje się, że 'fileno()' zawiedzie zarówno Linux/FreeBSD (i przypuszczam innych), gdy plik '*' 'fmemopen pochodzi z' lub coś równoważnego. Bez możliwości uzyskania deskryptora pliku, nie jestem pewien, czy mamy rozwiązanie. –
'fmemopen' może być również zaimplementowane za pomocą' funopen' na BSD. Jedna realizacja jest dostępny na https://redmine.openinfosecfoundation.org/attachments/105/0001-fmemopen-wrapper-added-fix-compilation-problems-on-m.patch –
'fork()' jest raczej ciężkie waga ten cel. Sugerowałbym zamiast tego użycie wątku. Byłoby jeszcze lepiej użyć 'select()' do multipleksowania pomiędzy odczytem i pisaniem z potoku, ale myślę, że to nie jest opcja tutaj. – Sven