1

この優れたページで、次の機能を見つけました。

function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end

この関数を cmd = "ping myknowngoodip -c 1" で実行すると、すべて問題なく、すぐに結果が返されます。

しかし、ping がタイムアウトした場合 (サーバーのダウンなど)、プログラム全体が少なくとも 5 秒間ブロックされます。

私にとって可能な解決策:

  • コルーチンを使用します (しかし、それを機能させるために適切に設計するにはどうすればよいでしょうか?)

  • ファイルが書き込まれたか、書き込みロックがかかっているかを検出するために何かを使用します (どうすればよいですか?)

目標は、copas ( http://keplerproject.github.io/copas/ ) を介して、さまざまな IP に ping を実行し、IP が有効かどうかを報告する「ルックアップ」リクエストを受信することです。Copas は稼働中で、これまでのところ動作しています

ご協力ありがとうございました

4

1 に答える 1