Quiero poder asignar la memoria a un descriptor de archivo para que pueda usar algunas funciones existentes que necesitan un descriptor de archivo. Esto es esencialmente lo que estoy buscando:llamada del sistema para asignar la memoria a un descriptor de archivo (mmap inverso)?
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 ... */
¿Qué llamadas al sistema, o llamadas, puedo utilizar para lograr esto?
Resulta que 'fileno()' falla en Linux/FreeBSD (y presumo otros) cuando 'FILE *' viene de 'fmemopen' o algo equivalente. Sin una forma de obtener el descriptor de archivo, no estoy seguro de que tengamos una solución. –
'fmemopen' también se puede implementar usando' funopen' en BSD. Una implementación está disponible en https://redmine.openinfosecfoundation.org/attachments/105/0001-fmemopen-wrapper-added-fix-compilation-problems-on-m.patch –
'fork()' es bastante pesado para este propósito. Sugeriría usar un hilo en su lugar. Sería aún mejor usar 'select()' para multiplexar entre leer y escribir desde la tubería, pero supongo que no es una opción aquí. – Sven