Emscripten - 有没有办法限制对标准输出的写入?

and*_*man 5 javascript c emscripten webassembly

我正在运行一个使用 emscripten 编译为 wasm 的 C 工具。该工具适用于非常大的文件。在 CLI 上正常运行此工具时,通常操作会传输结果并在返回足够的数据后提前终止程序。例如你可以运行:

./tool <input-file> | head -n 100

该工具将在检测到 stdout 已被 关闭后终止head,实际上仅读取一小部分输入。

问题是带有 emscripten 的 stdout 似乎是异步的(通过覆盖 Module.print),因此该工具每次都会运行完成。有没有办法让它在标准输出上阻塞,这样我只能读取我需要的内容,然后终止该工具?

jmq*_*jmq 0

您可以将输出重定向到文件,然后将任务置于后台。同时监视日志文件。当达到 100 行时,杀死子进程 pid。

像这样的一些应该有效:

rm -f /tmp/log
touch /tmp/log
./tool input_file > /tmp/log 2>&1 &
pid=$!

while sleep 1
do
    ret=`cat /tmp/log | wc -l`
    if [ "$ret" -ge 100 ]
    then
        kill $pid
        exit 0
    fi
done
Run Code Online (Sandbox Code Playgroud)

我触摸创建了一个空日志文件。这将避免我们在子进程创建它之前捕获它的竞争条件。wc -l 将返回行数。将睡眠值更改为适合您的测试时间的值。