Spec-Zone.ru › Julia 0.5

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).

END_OF_DOCUMENT_MARKER
Cintmax_t

Эквивалентно встроенному типу intmax_t c (Int64).

Cuintmax_t

Эквивалентно встроенному типу uintmax_t c (UInt64).

Csize_t

Эквивалентно встроенному типу size_t c (UInt).

Cssize_t

Эквивалентно встроенному типу ssize_t c.

Cptrdiff_t

Эквивалентно встроенному типу ptrdiff_t c (Int).

Cwchar_t

Эквивалентно встроенному типу wchar_t c (Int32).

Cfloat

Эквивалентно встроенному типу float c (Float32).

Cdouble

Эквивалентно встроенному типу double c (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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API