lex を使用してソケットからデータをスキャン/解析することは可能ですか? ソケットを定義するにはどうすればよいですか? SOCK_STREAM にする必要がありますか? select() ループを定義してパーサー用のデータがあることを確認するなど、YY_INPUT マクロで特別なことをする必要がありますか?
ありがとう
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 文字が必要であり、それらをそこに置くことを信頼していないという事実に関係しています。
fdopen(3)
、つまり TCP ソケットを試すことができSOCK_STREAM
ます (UDP ソケットでは実際には を取得できないため、これを行うことはできません)。ただし、ストリームでEOF
ソケットを使用すると、自動ダブルバッファリング (カーネルstdio(3)
およびストリーム内)。
または、Linuxをfmemopen(3)
使用している場合は、fopencookie(3)
.