是否可以使用lex從套接字掃描/解析數據?我如何去定義套接字?它應該是SOCK_STREAM嗎?我是否需要對我的YY_INPUT宏做任何事情,比如定義一個select()循環來確保解析器有數據?如何在插座上使用lex掃描儀?
感謝
是否可以使用lex從套接字掃描/解析數據?我如何去定義套接字?它應該是SOCK_STREAM嗎?我是否需要對我的YY_INPUT宏做任何事情,比如定義一個select()循環來確保解析器有數據?如何在插座上使用lex掃描儀?
感謝
您可以嘗試fdopen(3)
在SOCK_STREAM
,即TCP,插座(你不能真正做到這一點對一個UDP套接字,因爲你永遠不會得到一個EOF
),但使用套接字與stdio(3)
流由於自動雙緩衝(在內核和流中),容易出現問題。
你可以看看滾動你自己的流與fmemopen(3)
,或者,如果你在Linux上,甚至fopencookie(3)
。
如果你使用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
在每個輸入塊末尾需要兩個NUL字符有關,並且不相信您將它放在那裏。