2012-12-04 33 views
1

是否可以使用lex從套接字掃描/解析數據?我如何去定義套接字?它應該是SOCK_STREAM嗎?我是否需要對我的YY_INPUT宏做任何事情,比如定義一個select()循環來確保解析器有數據?如何在插座上使用lex掃描儀?

感謝

回答

0

您可以嘗試fdopen(3)SOCK_STREAM,即TCP,插座(你不能真正做到這一點對一個UDP套接字,因爲你永遠不會得到一個EOF),但使用套接字與stdio(3)流由於自動雙緩衝(在內核和流中),容易出現問題。

你可以看看滾動你自己的流與fmemopen(3),或者,如果你在Linux上,甚至fopencookie(3)

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在每個輸入塊末尾需要兩個NUL字符有關,並且不相信您將它放在那裏。