C интерфейс
-
ccall((symbol, library) or function_pointer, ReturnType, (ArgumentType1, ...), ArgumentValue1, ...) -
Вызов функции в C-экспортированной динамической библиотеке, указанной кортежем
(function name, library), где каждый компонент — строка или символ.Обратите внимание, что кортеж типа аргументов должен быть литеральным кортежем, а не кортежем-переменной или выражением. В качестве альтернативы,
ccallтакже может быть использован для вызова указателя на функцию, например, той, которая возвращаетсяdlsym.Каждый
ArgumentValueвccallбудет преобразован в соответствующийArgumentType, путём автоматической вставки вызововunsafe_convert(ArgumentType, cconvert(ArgumentType, ArgumentValue)). (См. также документацию по каждой из этих функций для более подробной информации.) В большинстве случаев это просто приводит к вызовуconvert(ArgumentType, ArgumentValue).
-
cglobal((symbol, library)[, type=Void]) -
Получение указателя на глобальную переменную в C-экспортированной динамической библиотеке, указанной точно так же, как и в
ccall. ВозвращаетPtr{Type}, по умолчаниюPtr{Void}если аргумент Type не указан. Значения можно читать или записывать с помощьюunsafe_loadилиunsafe_store!, соответственно.
-
cfunction(function::Function, ReturnType::Type, (ArgumentTypes...)) -
Генерация указателя на вызываемую C-функцию из Julia-функции. Аннотация типа возвращаемого значения в функции обратного вызова необходима в ситуациях, когда Julia не может автоматически вывести тип возвращаемого значения.
Например:
function foo() # body retval::Float64 end bar = cfunction(foo, Float64, ())
-
unsafe_convert(T, x) -
Преобразование
xв значение типаTВ случаях, когда
convertнеобходимо было бы принять объект Julia и преобразовать его вPtr, для определения и выполнения этого преобразования следует использовать эту функцию.Следует быть внимательным, чтобы убедиться, что ссылка Julia на
xсуществует до тех пор, пока результат этой функции будет использоваться. Соответственно, аргументxэтой функции никогда не должен быть выражением, только именем переменной или ссылкой на поле. Например,x=a.b.cприемлемо, ноx=[a,b,c]— нет.Префикс
unsafeу этой функции указывает, что использование результата этой функции после того, как аргументxэтой функции больше недоступен программе, может привести к неопределённому поведению, включая повреждение программы или сбой, в любое последующее время.
-
cconvert(T, x) -
Преобразование
xв значение типаT, обычно путём вызоваconvert(T,x)В случаях, когда
xне может быть безопасно преобразован вT, в отличие отconvert,cconvertможет вернуть объект другого типа, однако подходящего для обработкиunsafe_convert.Ни
convertниcconvertне должны принимать объект Julia и преобразовывать его вPtr.
-
unsafe_load(p::Ptr{T}[, i::Integer=1]) -
Загрузка значения типа
Tиз адреса i-го элемента (индексированного с 1), начиная сp. Это эквивалентно C-выражениюp[i-1].Префикс
unsafeу этой функции указывает, что никакая валидация не выполняется для указателяpдля проверки его валидности. Неправильное использование может привести к сбою вашей программы или возвращению мусорных данных, так же как и в C.
-
unsafe_store!(p::Ptr{T}, x[, i::Integer=1]) -
Сохранение значения типа
Tпо адресу i-го элемента (индексированного с 1), начиная сp. Это эквивалентно C-выражениюp[i-1] = x.Префикс
unsafeу этой функции указывает, что никакая валидация не выполняется для указателяpдля проверки его валидности. Неправильное использование может привести к повреждению или сбою вашей программы, так же как и в C.
-
unsafe_copy!(dest::Ptr{T}, src::Ptr{T}, N) -
Копирование
Nэлементов из исходного указателя в целевой, без проверки. Размер элемента определяется типом указателей.Префикс
unsafeу этой функции указывает, что никакая валидация не выполняется для указателейdestиsrcдля проверки их валидности. Неправильное использование может привести к повреждению или сбою вашей программы, так же как и в C.
-
unsafe_copy!(dest::Array, do, src::Array, so, N) -
Копирование
Nэлементов из исходного массива в целевой, начиная со смещенияsoв исходном иdoв целевом (индексированные с 1).Префикс
unsafeу этой функции указывает, что никакая валидация не выполняется для проверки, что N находится в пределах массива. Неправильное использование может привести к повреждению или сбою вашей программы, так же как и в C.
-
copy!(dest, src) -
Копирование всех элементов из коллекции
srcв массивdest. Возвращаетdest.
-
copy!(dest, do, src, so, N) -
Копирование
Nэлементов из коллекцииsrc, начиная со смещенияso, в массивdest, начиная со смещенияdo. Возвращаетdest.
-
pointer(array[, index]) -
Получение родного адреса элемента массива или строки. Следует быть внимательным, чтобы убедиться, что ссылка Julia на
aсуществует, пока этот указатель будет использоваться. Эта функция «небезопасна», как иunsafe_convert.Вызов
Ref(array[, index])предпочтительнее этой функции.
-
unsafe_wrap(Array, pointer::Ptr{T}, dims, own=false) -
Оборачивание объекта Julia
Arrayвокруг данных по адресу, заданномуpointer, без копирования. Тип элемента указателяTопределяет тип элемента массива.dims— это либо целое число (для одномерного массива), либо кортеж из размеров массива.ownнеобязательно указывает, должна ли Julia взять на себя владение памятью, вызвавfreeдля указателя, когда массив больше не ссылается.Эта функция отмечена как «небезопасная», потому что она вызовет ошибку, если
pointerне является допустимым адресом данных нужной длины.
-
pointer_from_objref(object_instance) -
Получение памяти адреса объекта Julia как
Ptr. Существование полученногоPtrне защитит объект от сборки мусора, поэтому необходимо убедиться, что объект ссылается в течение всего времени использованияPtr.
-
unsafe_pointer_to_objref(p::Ptr) -
Преобразование
Ptrв ссылку на объект. Предполагает, что указатель ссылается на допустимый выделенный на куче объект Julia. Если это не так, результатом будет неопределённое поведение, поэтому эта функция считается «небезопасной» и должна использоваться с осторожностью.
-
disable_sigint(f::Function) -
Отключение обработчика Ctrl-C во время выполнения функции на текущей задаче для вызова внешнего кода, который может вызвать код Julia, который не безопасен для прерывания. Предполагается вызывать с помощью синтаксиса блока
doследующим образом:disable_sigint() do # interrupt-unsafe code ... endЭто не нужно для потоков-рабочих (
Threads.threadid() != 1) так какInterruptExceptionбудет доставлен только в основной поток. Внешние функции, которые не вызывают код Julia или runtime Julia автоматически отключают sigint во время выполнения.
-
reenable_sigint(f::Function) -
Восстановление обработчика Ctrl-C во время выполнения функции. Временное отмена действия
disable_sigint.
-
systemerror(sysfunc, iftrue) -
Возбуждает
SystemErrorдляerrnoс описательной строкойsysfuncеслиiftrueявляетсяtrue
-
Ptr{T} -
Адрес памяти, ссылающийся на данные типа
T. Однако нет гарантии, что память действительна или что она фактически представляет данные указанного типа.
-
Ref{T} -
Объект, который безопасно ссылается на данные типа
T. Этот тип гарантированно указывает на допустимую, выделенную память Julia правильного типа. Основные данные защищены от освобождения сборщиком мусора, пока сама ссылкаRefссылается.Когда передаётся как аргумент
ccall(либо как типPtrилиRef), объект типаRefбудет преобразован в родной указатель на данные, на которые он ссылается.Нет недействительной (NULL) ссылки
Ref.
-
Cchar -
Эквивалент нативного типа C
char.
-
Cuchar -
Эквивалент нативного типа C
unsigned char(UInt8).
-
Cshort -
Эквивалент нативного типа C
signed short(Int16).
-
Cushort -
Эквивалент нативного типа C
unsigned short(UInt16).
-
Cint -
Эквивалент нативного типа C
signed int(Int32).
-
Cuint -
Эквивалент нативного типа C
unsigned int(UInt32).
-
Clong -
Эквивалент нативного типа C
signed long.
-
Culong -
Эквивалент нативного типа C
unsigned long.
-
Clonglong -
Эквивалент нативного типа C
signed long long(Int64).
-
Culonglong -
Эквивалент нативного типа C
unsigned long long(UInt64).
-
Cintmax_t -
Эквивалентно встроенному типу
intmax_tc (Int64).
-
Cuintmax_t -
Эквивалентно встроенному типу
uintmax_tc (UInt64).
-
Csize_t -
Эквивалентно встроенному типу
size_tc (UInt).
-
Cssize_t -
Эквивалентно встроенному типу
ssize_tc.
-
Cptrdiff_t -
Эквивалентно встроенному типу
ptrdiff_tc (Int).
-
Cwchar_t -
Эквивалентно встроенному типу
wchar_tc (Int32).
-
Cfloat -
Эквивалентно встроенному типу
floatc (Float32).
-
Cdouble -
Эквивалентно встроенному типу
doublec (Float64).
© 2009–2016 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/release-0.5/stdlib/c/