C Interface¶
- ccall((symbol, library) or function_pointer, ReturnType, (ArgumentType1, ...), ArgumentValue1, ...)¶
- Call function in C-exported shared library, specified by - (functionname,library)tuple, where each component is a string or symbol.- Note that the argument type tuple must be a literal tuple, and not a tuple-valued variable or expression. Alternatively, - ccallmay also be used to call a function pointer, such as one returned by- dlsym.- Each - ArgumentValueto the- ccallwill be converted to the corresponding- ArgumentType, by automatic insertion of calls to- unsafe_convert(ArgumentType,cconvert(ArgumentType,ArgumentValue)). (See also the documentation for each of these functions for further details.) In most cases, this simply results in a call to- convert(ArgumentType,ArgumentValue).
- cglobal((symbol, library)[, type=Void])¶
- Obtain a pointer to a global variable in a C-exported shared library, specified exactly as in - ccall. Returns a- Ptr{Type}, defaulting to- Ptr{Void}if no Type argument is supplied. The values can be read or written by- unsafe_loador- unsafe_store!, respectively.
- cfunction(function::Function, ReturnType::Type, (ArgumentTypes...))¶
- Generate C-callable function pointer from Julia function. Type annotation of the return value in the callback function is a must for situations where Julia cannot infer the return type automatically. - For example: - function foo()# bodyretval::Float64endbar=cfunction(foo,Float64,()) 
- unsafe_convert(T, x)¶
- Convert - xto a value of type- T- In cases where - convertwould need to take a Julia object and turn it into a- Ptr, this function should be used to define and perform that conversion.- Be careful to ensure that a Julia reference to - xexists as long as the result of this function will be used. Accordingly, the argument- xto this function should never be an expression, only a variable name or field reference. For example,- x=a.b.cis acceptable, but- x=[a,b,c]is not.- The - unsafeprefix on this function indicates that using the result of this function after the- xargument to this function is no longer accessible to the program may cause undefined behavior, including program corruption or segfaults, at any later time.
- cconvert(T, x)¶
- Convert - xto a value of type- T, typically by calling- convert(T,x)- In cases where - xcannot be safely converted to- T, unlike- convert,- cconvertmay return an object of a type different from- T, which however is suitable for- unsafe_convertto handle.- Neither - convertnor- cconvertshould take a Julia object and turn it into a- Ptr.
- unsafe_load(p::Ptr{T}[, i::Integer=1])¶
- Load a value of type - Tfrom the address of the ith element (1-indexed) starting at- p. This is equivalent to the C expression- p[i-1].- The - unsafeprefix on this function indicates that no validation is performed on the pointer- pto ensure that it is valid. Incorrect usage may segfault your program or return garbage answers, in the same manner as C.
- unsafe_store!(p::Ptr{T}, x[, i::Integer=1])¶
- Store a value of type - Tto the address of the ith element (1-indexed) starting at- p. This is equivalent to the C expression- p[i-1]=x.- The - unsafeprefix on this function indicates that no validation is performed on the pointer- pto ensure that it is valid. Incorrect usage may corrupt or segfault your program, in the same manner as C.
- unsafe_copy!(dest::Ptr{T}, src::Ptr{T}, N)¶
- Copy - Nelements from a source pointer to a destination, with no checking. The size of an element is determined by the type of the pointers.- The - unsafeprefix on this function indicates that no validation is performed on the pointers- destand- srcto ensure that they are valid. Incorrect usage may corrupt or segfault your program, in the same manner as C.
- unsafe_copy!(dest::Array, do, src::Array, so, N)
- Copy - Nelements from a source array to a destination, starting at offset- soin the source and- doin the destination (1-indexed).- The - unsafeprefix on this function indicates that no validation is performed to ensure that N is inbounds on either array. Incorrect usage may corrupt or segfault your program, in the same manner as C.
- copy!(dest, src)¶
- Copy all elements from collection - srcto array- dest. Returns- dest.
- copy!(dest, do, src, so, N)
- Copy - Nelements from collection- srcstarting at offset- so, to array- deststarting at offset- do. Returns- dest.
- pointer(array[, index])¶
- Get the native address of an array or string element. Be careful to ensure that a Julia reference to - aexists as long as this pointer will be used. This function is “unsafe” like- unsafe_convert.- Calling - Ref(array[,index])is generally preferable to this function.
- unsafe_wrap(Array, pointer::Ptr{T}, dims, own=false)¶
- Wrap a Julia - Arrayobject around the data at the address given by- pointer, without making a copy. The pointer element type- Tdetermines the array element type.- dimsis either an integer (for a 1d array) or a tuple of the array dimensions.- ownoptionally specifies whether Julia should take ownership of the memory, calling- freeon the pointer when the array is no longer referenced.- This function is labelled “unsafe” because it will crash if - pointeris not a valid memory address to data of the requested length.
- pointer_from_objref(object_instance)¶
- Get the memory address of a Julia object as a - Ptr. The existence of the resulting- Ptrwill not protect the object from garbage collection, so you must ensure that the object remains referenced for the whole time that the- Ptrwill be used.
- unsafe_pointer_to_objref(p::Ptr)¶
- Convert a - Ptrto an object reference. Assumes the pointer refers to a valid heap-allocated Julia object. If this is not the case, undefined behavior results, hence this function is considered “unsafe” and should be used with care.
- disable_sigint(f::Function)¶
- Disable Ctrl-C handler during execution of a function on the current task, for calling external code that may call julia code that is not interrupt safe. Intended to be called using - doblock syntax as follows:- disable_sigint()do# interrupt-unsafe code...end - This is not needed on worker threads ( - Threads.threadid()!=1) since the- InterruptExceptionwill only be delivered to the master thread. External functions that do not call julia code or julia runtime automatically disable sigint during their execution.
- reenable_sigint(f::Function)¶
- Re-enable Ctrl-C handler during execution of a function. Temporarily reverses the effect of - disable_sigint.
- systemerror(sysfunc, iftrue)¶
- Raises a - SystemErrorfor- errnowith the descriptive string- sysfuncif- iftrueis- true
- Ptr{T}¶
- A memory address referring to data of type - T. However, there is no guarantee that the memory is actually valid, or that it actually represents data of the specified type.
- Ref{T}¶
- An object that safely references data of type - T. This type is guaranteed to point to valid, Julia-allocated memory of the correct type. The underlying data is protected from freeing by the garbage collector as long as the- Refitself is referenced.- When passed as a - ccallargument (either as a- Ptror- Reftype), a- Refobject will be converted to a native pointer to the data it references.- There is no invalid (NULL) - Ref.
- Cchar¶
- Equivalent to the native - charc-type.
- Cuchar¶
- Equivalent to the native - unsignedcharc-type (- UInt8).
- Cshort¶
- Equivalent to the native - signedshortc-type (- Int16).
- Cushort¶
- Equivalent to the native - unsignedshortc-type (- UInt16).
- Cint¶
- Equivalent to the native - signedintc-type (- Int32).
- Cuint¶
- Equivalent to the native - unsignedintc-type (- UInt32).
- Clong¶
- Equivalent to the native - signedlongc-type.
- Culong¶
- Equivalent to the native - unsignedlongc-type.
- Clonglong¶
- Equivalent to the native - signedlonglongc-type (- Int64).
- Culonglong¶
- Equivalent to the native - unsignedlonglongc-type (- UInt64).
- Cintmax_t¶
- Equivalent to the native - intmax_tc-type (- Int64).
- Cuintmax_t¶
- Equivalent to the native - uintmax_tc-type (- UInt64).
- Csize_t¶
- Equivalent to the native - size_tc-type (- UInt).
- Cssize_t¶
- Equivalent to the native - ssize_tc-type.
- Cptrdiff_t¶
- Equivalent to the native - ptrdiff_tc-type (- Int).
- Cwchar_t¶
- Equivalent to the native - wchar_tc-type (- Int32).
- Cfloat¶
- Equivalent to the native - floatc-type (- Float32).
- Cdouble¶
- Equivalent to the native - doublec-type (- Float64).
LLVM Interface¶
- llvmcall(IR::String, ReturnType, (ArgumentType1, ...), ArgumentValue1, ...)¶
- llvmcall((declarations::String, IR::String), ReturnType, (ArgumentType1, ...), ArgumentValue1, ...)
- Call LLVM IR string in the first argument. Similar to an LLVM function - defineblock, arguments are available as consecutive unnamed SSA variables (%0, %1, etc.).- The optional declarations string contains external functions declarations that are necessary for llvm to compile the IR string. Multiple declarations can be passed in by separating them with line breaks. - Note that the argument type tuple must be a literal tuple, and not a tuple-valued variable or expression. - Each - ArgumentValueto- llvmcallwill be converted to the corresponding- ArgumentType, by automatic insertion of calls to- unsafe_convert(ArgumentType,cconvert(ArgumentType,ArgumentValue)). (see also the documentation for each of these functions for further details). In most cases, this simply results in a call to- convert(ArgumentType,ArgumentValue).- See - test/llvmcall.jlfor usage examples.