Quel est l'équivalent Windows pour les fonctionnalités définies dans sys/select.h et termios.h
J'ai une application sous linux, qui est compilé avec succès.
Je veux exécuter le même programme dans windows.
Mais la compilation produit à la suite d'erreurs liées à des fichiers d'en-tête.
- Ne peut pas trouver sys/select.h
- Ne peut pas trouver termios.h
Comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
L'API Windows est structurellement et stylistiquement très différente de la fusion des appels système et les routines de la bibliothèque fournie par toute la saveur d'Unix.
termio.h
Windows ne se borne I/O avec un modèle très différent de tout *nix système. En conséquence, il n'y a vraiment pas d'équivalent direct à la
termios.h
en-tête et de ses amis.Vous voulez lire à MSDN sur le Windows Les Moyens De Communication,.
Certaines choses à apprendre plus au sujet inclure:
BuildCommDCB()
SetCommState()
En général, vous trouverez que vous avez besoin pour traiter un beaucoup plus avec l'API Windows directement parce que
stdio
va ajouter à la confusion lors de périphérique d'e/S.sélectionner.h
Il n'y a pas d'équivalent direct à la Unix select(2) de l'appel système.
Dans Windows, de nombreux objets du noyau peut être en soit signalée ou non signalé état, et la loi de la signalisation, l'objet peut être utilisé pour libérer un thread qui appelle
WaitForMultipleObjects()
. Certains mais pas tous lesHANDLE
objets sont signalés lorsque les données sont disponibles. Plus précisément, je sais queHANDLE
s de WinSock ont cette capacité, mais je ne sais pas à propos de la Comm ' de l'API. Je sais queHANDLE
s à un fichier ouvert ne le font pas.Si vous avez besoin d'attendre pour un événement dans un thread de traitement de la fenêtre de messages, alors vous devriez probablement utiliser
MsgWaitForMultipleObjects()
au lieu de cela, car il sera bien livrer des messages tandis que le thread est bloqués.Lisez à propos de la Windows primitives de synchronisation à l'article MSDN À L'Aide De La Synchronisation.
Cependant, il existe plusieurs types de asynchronous I/O intégré à Windows qui peut remplacer le besoin de
select()
par un changement de design. Les deux nécessitent l'utilisation de fonctionnalités qui ne peut pas être utilisé en combinaison avec le C de la bibliothèque stdio.MSDN a plusieurs articles sur les I/O des techniques, ainsi que de nombreux exemples:
CreateFile()
(en particulier la section "Remarques")Noter que l'essentiel de l'information sur la façon dont Windows œuvres sont disséminées entre la présentation des articles et les remarques des sections de la documentation de référence de l'API de fonctions et de structures. Cela peut donner l'impression que rien n'est entièrement documenté sur une première lecture.
Portage avec Cygwin
Une autre approche consiste à utiliser Cygwin pour le port. Il fournit la plupart de POSIX couche au-dessus de l'API Windows. Cependant, vous allez vous retrouver avec une application qui dépend de la DLL Cygwin qui est GPL, sauf si vous achetez une licence d'utilisation commerciale de leur part. Il peut être difficile d'utiliser Cygwin pour obtenir une application qui fonctionne bien pour un utilisateur de Windows avec aucune expérience Unix aussi, comme beaucoup d'autres hypothèses sur la façon dont les deux systèmes sont configurés et utilisés diffèrent.
Cygwin a fait beaucoup de levage lourd pour construire une mise en œuvre de
select()
qui fonctionne sur Windows donné un mélange de différents descripteurs de fichiers ouverts. Cet effort est décrit dans le Guide de l'Utilisateur.Soyez conscient que la construction de contre Cygwin n'est documentée et étayée si c'est fait à partir de l'intérieur de l'environnement Cygwin. Habituellement, il ne suffit pas de mettre Cygwin bin au PATH de Windows et de travailler à partir d'une invite de commande. Vous avez vraiment besoin de lancer Cygwin compilation de bash et compiler à partir de là que tout est à l'aide de la même Cygwin style des points de montage et de simulation de fichiers Unix structure.
Mélange Cygwin fichiers d'en-tête avec l'outil tiers fichiers d'en-tête est un chemin sûr vers la folie.
Edit: j'ai réarrangé un peu, et ajouté un peu de contenu en réponse à des commentaires.
J'ai créé 2 fichiers à l'aide de code que j'ai trouvé dans certains forums de contourner windows.h et port com windows bibliothèques:
"nowindows.h"
et
"nowindowscomport.h"