Ich habe mir den Kopf kratzt und suche seit Stunden eine Antwort dafür. Grundsätzlich öffne ich einen Sockel für eine andere Maschine und lese die Daten daraus. Dieser Socket wird dann über einen fdopen-Aufruf, der im int den Socket repräsentiert, in ein Datei-Handle "konvertiert". Die resultierende Dateikennung wird dann an einen Bison-Parser übergeben, der die über den Socket empfangenen Daten direkt analysiert. All das funktioniert gut auf Linux. Jetzt habe ich versucht, diesen Code in Windows zu portieren, und ich versage schade. Der Code sieht etwa so aus:Winsock-Socket als Datei-Handle
FILE* fileHandle;
#if defined WINCE || defined WIN32
int fd = _open_osfhandle(socket, _O_RDONLY);
if (fileHandle = fdopen(fd, "r")) {
#else
if (fileHandle = fdopen(socket, "r")) {
#endif
... // code to call my parser with fileHandle as argument
Der Bison/flex-Parser nicht in der Windows-Version, da die Dateikennung auf eine leere Strom/Datei zu zeigen scheint. Kann jemand auf eine umfassende Ressource verweisen, die dieses Zeug erklärt oder auf eine alternative Lösung hinweist?
Vielen Dank und beste Grüße,
André
Dies hat mich nicht direkt, da der Code helfen, das nenne ich im Grunde erzeugt wird. Ich kann die Windows-spezifischen Funktionen nicht aufrufen, es sei denn, ich erstelle einen Wrapper oder überschreibe etwas vom Flex/Bison generierten Code, den ich vermeiden möchte. –
Dann haben Sie kein Glück. Sie müssen etwas neu schreiben. Sie können C-Datei-E/A-Funktionen nicht auf einem Socket-Handle in Windows verwenden. –
Yeap das ist auch meine Schlussfolgerung. Teile davon müssen neu geschrieben werden. –