Emscripten-有没有办法限制对stdout的写入?

问题描述 投票:3回答:1

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

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

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

问题在于,带有emscripten的stdout似乎是异步的(通过重写Module.print),因此该工具每次都会运行到完成状态。有没有办法让它在stdout上阻塞,所以我只能读取所需的内容,然后终止该工具?

javascript c webassembly emscripten
1个回答
0
投票

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

类似这样的方法应该起作用:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.