私は頭を傷つけていて、これで何時間も答えを探していました。基本的に私は、他のマシンへのソケットを開いてそこからデータを読み込むことです。このソケットは、ソケットを表すintで渡されるfdopen呼び出しを介してファイルハンドルに "変換"されます。結果のファイルハンドルは、ソケットを介して受信したデータを直接解析するbisonパーサに渡されます。これらはすべてLinux上でうまく動作します。今、私はこのコードをWindowsに移植しようとしましたが、私はうんざりして失敗します。ファイルハンドルとしてのwinsockソケット
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
ファイルハンドルが空ストリーム/ファイルを指すようですので、バイソン/フレックスパーサは、Windowsのバージョンに失敗します。コードは次のようになります。誰かが、このようなことを説明している包括的なリソースを指し示すことができますか、代替ソリューションをヒントできますか?
おかげで、最高のよろしく、Windowsので
アンドレ
)nSocketFdソケットによるファイルディスクリプタリターン(。いくつかのラッパーを作成したり、避けたいflex/bison生成コードの一部をオーバーライドしない限り、ウィンドウ内の特定の関数を呼び出すことはできません。 –
あなたは運がありません。あなたは何かを書き直す必要があります。 WindowsのソケットハンドルでCファイルI/O関数を使用することはできません。 –
これも私の結論です。この部分を書き直す必要があります。 –