Pour éviter de compter sur les outils sans fil, je veux obtenir l'essid directement à partir de l'appareil avec ioctl, en C ce ne serait pas un problème, mais dans Ruby c'est assez différent.Obtenir essid via ioctl dans ruby
Le problème suit struct de wireless.h qui est utilisé comme entrée/réponse de ioctl:
struct iw_point
{
void __user *pointer; /* Pointer to the data (in user space) */
__u16 length; /* number of fields or size in bytes */
__u16 flags; /* Optional params */
};
La partie de pointeur doit être une adresse valide d'une zone de mémoire, suivie de la longueur octets, suivi d'un champ de drapeau. J'ai essayé avec Array # pack et le bit-struct gem, mais je n'ai pas encore trouvé de solution.
Existe-t-il un moyen de contourner ce problème de pointeur de mémoire?
Eh bien, je suppose que pas d'autre choix. En fait, ioctl devrait fonctionner dans les deux sens correctement et pas seulement segfault quand une structure comme celle ci-dessus est utilisée. ;) – unexist
Je n'ai pas regardé les tripes d'ioctl récemment, mais si la version de loonix est quelque chose comme un unix BSD, elle a une ambiguïté horrible en ce que savoir si elle lit ou écrit, ou combien, nécessite de connaître les deux l'ioctl et l'appareil. (!) – DigitalRoss
Vrai, mais les appareils doivent normalement suivre un brouillon pour être utilisable par les clients, ce qui est applicable de la même manière pour les vendeurs et/ou les auteurs de pilotes. Le problème dans ce cas est juste le manque de pointeurs dans Ruby qui ne peut probablement pas être facilement couvert par bitstruct. Pendant mon travail sur mon gestionnaire de fenêtres, je suis au courant de l'API C de Ruby - donc ce ne sera pas un problème du tout. :) – unexist