使用ccall重定向从Julia调用C函数产生的标准输出

时间:2019-05-28 15:51:57

标签: julia

我正在为C / C ++库制作Julia包装器。我包装的C / C ++函数将写入标准输出。有没有一种方法可以从Julia端重定向这些消息,而无需在C / C ++代码中注释/删除写语句?

1 个答案:

答案 0 :(得分:1)

您可以为此使用redirect_stdout

oldstd = stdout
redirect_stdout(somewhere_else)
ccall(:printf, Cint, (Cstring,), "Hello World!")
Base.Libc.flush_cstdio() # it might be necessary to flush C stdio to maintain the correct order of outputs or forcing a flush
redirect_stdout(oldstd) # recover original stdout

您可能想改用redirect_stdout(f::Function, stream)方法。在这里,f应该是不带参数的函数(例如,() -> do_something(...))。此方法自动将流恢复到stdout。使用do语法;

redirect_stdout(somewhere) do
    ccall(:printf, Cint, (Cstring,), "Hello World!")
    Base.Libc.flush_cstdio() # might be needed
end