5

ioctl() を使用して、読み取り可能なバイト数を取得したい

私がやった方法は次のとおりです。

mysocket=socket(....);
ioctl(mysocket, FIONBIO, &zero);    
connect(.....);
ioctl( mysocket, FIONREAD, &numBytes );
read(mysocket, buffer, numBytes);

これは unix では問題なく動作していましたが、今度は Linux に移植する必要があります。エラーが発生し続けます。

エラー: 'FIONBIO' はこのスコープで宣言されていません

Linux に固有のヘッダー ファイルはありますか? または 'FIOBIO' が Linux でまったく動作しませんか?

次のヘッダーが含まれています。

#include <cstring>
#include <sys/socket.h>
#include <stropts.h>
#include <fcntl.h>
#include <stddef.h>
#include <sys/un.h>
#include <sys/types.h>
#include <stdlib.h> 
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/select.h>
#include <fstream>

そして私は削除しました

#include <sys/filio.h>

sys/filio.hが見つからないというエラーをスローしていたため

4

1 に答える 1

24

sys/ioctl.hをインクルードしてみましたか?

このコードは私のために働きます:

#include <sys/ioctl.h>
#include <stdio.h>

int main() {
    printf("FIONBIO value %d\n", FIONBIO);
}

を実行するgrep -R FIONBIO /usr/includeと、次の場所にあります。

/usr/include/asm-generic/ioctls.h:#define FIONBIO 0x5421
于 2012-03-07T22:06:08.397 に答える