Я намерен манипулировать двоичными файлами с помощью NIF для приложения, которое я планирую кодировать на Erlang. Основные ссылки на файлы cpp и erl для NIF приведены ниже.
[Ссылка на Erl Gist] https://gist.github.com/abhijitiitr/3a5bc97184d6dd32f97b
[C++ Gist Link] https://gist.github.com/abhijitiitr/24d2b780f2cdacebfb07
В основном я пытаюсь сделать простой тест. Делитесь двоичными файлами через вызовы NIF и успешно манипулируйте ими с помощью последовательных вызовов NIF.
Если вы тестируете код в erlang REPL с помощью
c(binary_test).
Ref=binary_test:open(<<1>>).
binary_test:increment(Ref,<<3>>).
Двоичные файлы сохраняли изменения между вызовами NIF. Вывод REPL для третьей команды:
1
3
60
60
<<"?">>
Я прошел <<1>>
на этапе инициализации. Почему он изменился на <<60>>
? Я не могу понять, что здесь происходит. Может ли кто-нибудь указать на ошибку?
Инструкции по компиляции С++
clang++ -std=c++11 -stdlib=libc++ -undefined dynamic_lookup -O3 -dynamiclib binary_test.cpp -o binary_test.so -I /usr/local/Cellar/erlang/17.0/lib/erlang/erts-6.0/include/
на моем Mac.
Также я хотел спросить о параллельных процессах, управляющих общим ресурсом в NIF. Возможно ли это или существует правило, согласно которому доступ к NIF должен осуществляться в одном процессе Erlang.