In both version 0.4 and 0.5-dev everything is as you show 
until: pointer_to_array(Ptr{UInt8}(ptr[]), sz[], true)
then 
julia> pointer_to_array(Ptr{UInt8}(ptr[]), sz[], true)
140685948747867-element Array{UInt8,1}:

signal (11): Segmentation fault
while loading no file, in expression starting on line 0
alignment at ./show.jl:1104
unknown function (ip: 0x7ff401d4117f)
[inline] at 
/home/centos/buildbot/slave/package_tarball64/build/src/julia_internal.h:63
jl_call_method_internal at 
/home/centos/buildbot/slave/package_tarball64/build/src/gf.c:1914
...
jl_apply_generic at 
/home/centos/buildbot/slave/package_tarball64/build/src/gf.c:1917
run_frontend at ./REPL.jl:860
run_repl at ./REPL.jl:168
unknown function (ip: 0x7ff4023431e3)
[inline] at 
/home/centos/buildbot/slave/package_tarball64/build/src/julia_internal.h:63
jl_call_method_internal at 
/home/centos/buildbot/slave/package_tarball64/build/src/gf.c:1914
_start at ./client.jl:342
unknown function (ip: 0x7ff6042f0199)
jl_apply_generic at 
/home/centos/buildbot/slave/package_tarball64/build/src/gf.c:1917
unknown function (ip: 0x401c64)
unknown function (ip: 0x40181f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x401865)
/home/jas/Desktop/Juliav05: line 2:  4104 Segmentation fault     
 /usr/bin/julia
               _
(generic Linux version of julia)

On Wednesday, March 9, 2016 at 2:55:31 PM UTC-5, Jeffrey Sarnoff wrote:
>
> Thank you, much appreciated.
>
> On Wednesday, March 9, 2016 at 2:52:01 PM UTC-5, Yichao Yu wrote:
>>
>> On Wed, Mar 9, 2016 at 1:05 PM, Jeffrey Sarnoff 
>> <[email protected]> wrote: 
>> > I am bound to the api, at least for calling into the application.  I 
>> don't 
>> > know how to do either of the things you recommend.  Could you point me 
>> to an 
>> > example? 
>>
>> See below. Note that the `open_memstream` API may not be widely 
>> available on non-Linux. (Apparently it's aded to POSIX though...) 
>> The reason you have to deal directly with C FILE* is that the C FILE* 
>> API is not designed to be extensible (or at least there's no portable 
>> API to do so). Therefore, you can't convert a opaque julia IO object 
>> to a C FILE* and let C libraries write through it instead... 
>>
>> ``` 
>> julia> p_cstdout = unsafe_load(cglobal(:stdout, Ptr{Void})) 
>> Ptr{Void} @0x00007f6dcb81f600 
>>
>> julia> ccall(:fwrite, Csize_t, (Cstring, Csize_t, Csize_t, Ptr{Void}), 
>> "aaa\n", 4, 1, p_cstdout) 
>> aaa 
>> 0x0000000000000001 
>>
>> julia> ptr = Ref{Ptr{Void}}() 
>> Base.RefValue{Ptr{Void}}(Ptr{Void} @0x000000000000000e) 
>>
>> julia> sz = Ref{Csize_t}() 
>> Base.RefValue{UInt64}(0x00007f6bc942f5f0) 
>>
>> julia> strstm = ccall(:open_memstream, Ptr{Void}, (Ptr{Ptr{Void}}, 
>> Ptr{Csize_t}), ptr, sz) 
>> Ptr{Void} @0x0000000002638f70 
>>
>> julia> ccall(:fwrite, Csize_t, (Cstring, Csize_t, Csize_t, Ptr{Void}), 
>> "aaa\n", 4, 1, strstm) 
>> 0x0000000000000001 
>>
>> julia> ccall(:fwrite, Csize_t, (Cstring, Csize_t, Csize_t, Ptr{Void}), 
>> "aaa\n", 4, 1, strstm) 
>> 0x0000000000000001 
>>
>> julia> sz[] 
>> 0x00007f6bc942f5f0 
>>
>> julia> ccall(:fclose, Cint, (Ptr{Void},), strstm) 
>> 0 
>>
>> julia> sz[] 
>> 0x0000000000000008 
>>
>> julia> pointer_to_array(Ptr{UInt8}(ptr[]), sz[], true) 
>> 8-element Array{UInt8,1}: 
>>  0x61 
>>  0x61 
>>  0x61 
>>  0x0a 
>>  0x61 
>>  0x61 
>>  0x61 
>>  0x0a 
>>
>> julia> ary = ans 
>> 8-element Array{UInt8,1}: 
>>  0x61 
>>  0x61 
>>  0x61 
>>  0x0a 
>>  0x61 
>>  0x61 
>>  0x61 
>>  0x0a 
>>
>> julia> bytestring(ary) 
>> "aaa\naaa\n" 
>> ``` 
>>
>> > 
>> > On Wednesday, March 9, 2016 at 12:58:20 PM UTC-5, Yichao Yu wrote: 
>> >> 
>> >> 
>> >> On Mar 9, 2016 12:38 PM, "Jeffrey Sarnoff" <[email protected]> 
>> wrote: 
>> >> > 
>> >> > I am trying to wrap this so it will (a) print to STDOUT (b) (if 
>> >> > possible) print to a string: 
>> >> > void arf_fprint(FILE * file, const arf_t x)ΒΆ 
>> >> > 
>> >> > Prints x as an integer mantissa and exponent to the stream file. 
>> >> > 
>> >> > 
>> >> > arf_t is made with  arf(x), that works. 
>> >> > 
>> >> > 
>> >> > this: 
>> >> > 
>> >> > function arf_fprint(x::arb) 
>> >> > 
>> >> >            a = arf(x); s=STDOUT 
>> >> > 
>> >> >            ccall((:arf_fprint, :libarb), Void, (Ptr{s}, 
>> >> > Ptr{arf_struct},), &s, &a) 
>> >> 
>> >> Julia does not use c FILE*, if you are bound to this api, you should 
>> >> probably fetch the c stream with cglobal or construct a string stream 
>> with 
>> >> platform dependent api. 
>> >> 
>> >> > 
>> >> >        end 
>> >> > 
>> >> > does this: 
>> >> > ERROR: TypeError: Ptr: in parameter, expected Type{T}, got Base.TTY 
>> >> >  in arf_fprint at none:3 
>> >> > 
>>
>

Reply via email to