Je souhaite pouvoir mapper la mémoire sur un descripteur de fichier afin de pouvoir utiliser certaines fonctions existantes nécessitant un descripteur de fichier. Voici ce essentiellement ce que je cherche:appel système pour mapper la mémoire à un descripteur de fichier (inverse 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 ... */
Quel système d'appel ou des appels, puis-je utiliser pour ce faire?
Il s'avère que 'fileno()' échoue à la fois sur Linux/FreeBSD (et je suppose que d'autres) lorsque le 'FILE *' vient de 'fmemopen' ou quelque chose d'équivalent. Sans moyen d'obtenir le descripteur de fichier, je ne suis pas sûr que nous ayons une solution. –
'fmemopen' peut également être implémenté en utilisant' funopen' sur BSD. Une implémentation est disponible sur https://redmine.openinfosecfoundation.org/attachments/105/0001-fmemopen-wrapper-added-fix-compilation-problems-on-m.patch –
'fork()' est assez lourd pour Cet objectif. Je suggère d'utiliser un fil à la place. Serait encore mieux d'utiliser 'select()' pour multiplexer entre la lecture et l'écriture depuis le tuyau, mais je suppose que ce n'est pas une option ici. – Sven