1

lex を使用してソケットからデータをスキャン/解析することは可能ですか? ソケットを定義するにはどうすればよいですか? SOCK_STREAM にする必要がありますか? select() ループを定義してパーサー用のデータがあることを確認するなど、YY_INPUT マクロで特別なことをする必要がありますか?

ありがとう

4

2 に答える 2

1

flex を使用している場合は、必要に応じて再定義できYY_INPUTます。

次のようになります。

#define YY_INPUT(buf,result,max_size)  \
read up to max_size characters into buf \
result = (read worked) ? (number of characters read) : YY_NULL;

文字がメモリのどこかにある場合でも、それらを にコピーする必要がありますbuf。これは少し面倒ですが、flex各入力チャンクの最後に 2 つの NUL 文字が必要であり、それらをそこに置くことを信頼していないという事実に関係しています。

于 2012-12-05T03:39:42.810 に答える
0

fdopen(3)、つまり TCP ソケットを試すことができSOCK_STREAMます (UDP ソケットでは実際には を取得できないため、これを行うことはできません)。ただし、ストリームでEOFソケットを使用すると、自動ダブルバッファリング (カーネルstdio(3)およびストリーム内)。

または、Linuxをfmemopen(3)使用している場合は、fopencookie(3).

于 2012-12-04T23:45:20.697 に答える