guestfs-java — як
користуватися
libguestfs з коду на Java
import com.redhat.et.libguestfs.*;
GuestFS g = new GuestFS ();
g.add_drive ("disk.img",
new HashMap<String,Object>() {
{
put ("readonly", Boolean.TRUE);
put ("format", "raw");
}
});
g.launch ();
На цій
сторінці
підручника
наведено
документацію
щодо
викликів libguestfs
з коду
мовою
програмування
Java. На
сторінці
задокументовано
відмінності
від
програмного
інтерфейсу
C та подано
декілька
прикладів.
Якщо ви не
дуже
знайомі із
користуванням
libguestfs, вам також
слід
прочитати
підручник
з
guestfs(3).
Дескриптор
закривається,
коли його
вилучає
засіб
збирання
сміття у
системі.
Оскільки
дескриптори
libguestfs у значній
мірі
керуються
станами,
можна
закрити (і
отже,
звільнити)
дескриптор
явним
чином,
викликавши
метод "close".
Помилки
функцій libguestfs
пов'язуються
із
виключенням
"LibGuestFSException".
Виключення
містить
єдиний
параметр,
яким є
повідомлення
про
помилку
(параметр
"String").
Спроба
викликати
будь-який
метод для
закритого
дескриптора
призведе
до
надсилання
однакового
виключення.
Якщо у
прив'язках
станеться
помилка
malloc(3)
або якоїсь
іншої
функції
отримання
пам'яті,
буде
надіслано
виключення
"LibGuestFSOutOfMemory".
З боку Java
реалізовано
повну
підтримку
програмного
інтерфейсу
подій libguestfs.
Створіть
клас, який
реалізує
інтерфейс
"EventCallback",
створіть
екземпляр
цього
класу, а
потім
викличте
метод
"GuestFS#set_event_callback" для
реєстрації
цього
екземпляра.
Метод "event"
класу
викликається,
коли libguestfs
створює
повідомлення
про подію.
Наприклад,
такий код
виводить
усі події
трасування:
GuestFS g = new GuestFS ();
g.set_trace (true);
g.set_event_callback (
new EventCallback () {
public void event (long event, int eh,
String buffer, long[] array) {
System.out.println (GuestFS.eventToString (event) +
": " + buffer);
}
},
GuestFS.EVENT_TRACE);
g.add_drive_ro ("disk.img");
// тощо
Виведені
дані
будуть
подібними
до таких:
EVENT_TRACE: add_drive_ro "disk.img"
EVENT_TRACE: add_drive_ro = 0
// тощо
Деяким
методам
передається
необов'язкова
карта
додаткових
параметрів.
Прикладом
таких
методів є
метод "g.add_drive",
який можна
викликати
в один з
двох
способів:
g.add_drive ("disk.img");
або за
допомогою
додаткових
аргументів:
Map<String, Object> optargs =
new HashMap<String, Object>() {
{
put ("readonly", Boolean.TRUE);
put ("format", "raw");
}
};
g.add_drive ("disk.img", optargs);
Щоб
дізнатися
більше про
цю тему, див.
"ВИКЛИКИ
ІЗ
НЕОБОВ'ЯЗКОВИМИ
АРГУМЕНТАМИ".
Необов'язкові
параметри
дескриптора
При
створенні
дескриптора
ви також
можете
передати
карту
необов'язкових
параметрів:
Map<String, Object> optargs =
new HashMap<String, Object>() {
{
put ("close_on_exit", Boolean.FALSE);
put ("environment", Boolean.TRUE);
}
};
GuestFS g = new GuestFS (optargs);
Докладніший
опис можна
знайти тут:
"guestfs_create_flags" in
guestfs(3).
Libguestfs для Java є
розширенням
Java Native Interface (JNI), яке
поділено
на три
частини:
- libguestfs.jar
-
libguestfs-ВЕРСІЯ.jar
- Файл JAR з
кодом суто
Java, який
містить
декілька
класів,
основним з
яких є
"com.redhat.et.libguestfs.GuestFS". У
основній
гілці
розробки
назва
файла JAR
містить
номер
версії, але
у деяких
дистрибутивах
Linux файл
перейменовують
так, щоб у
назві не
було
номера
версії.
- libguestfs_jni.so
- Код JNI
(написаний
на C). Ця
частина
містить
приватні
функції
інтерфейсу
між кодом Java
і
звичайною
бібліотекою
libguestfs, яку
написано
на C. Вам не
слід
викликати
ці функції
безпосередньо.
- libguestfs.so
- Типова
бібліотека
C libguestfs.
Для
збирання
вашої
програми
мовою Java вам
слід
встановити
розташування
файла JAR і
додати
його до
шляху до
класів.
Приклад:
export CLASSPATH=/usr/share/java/libguestfs.jar
javac MyProgram.java
Для
запуску
вашої
програми Java
вам також
потрібно
впевнитися,
що файл JAR
перебуває
у каталозі
зі шляху до
класів, а
також є
частиною
вашої
програми.
Приклад:
export CLASSPATH=.:/usr/share/java/libguestfs.jar
java MyProgram
@EXAMPLE1@
@EXAMPLE2@
guestfs(3),
guestfs-examples(3),
guestfs-erlang(3),
guestfs-gobject(3),
guestfs-golang(3),
guestfs-lua(3),
guestfs-ocaml(3),
guestfs-perl(3),
guestfs-python(3),
guestfs-recipes(1),
guestfs-ruby(3),
http://libguestfs.org/,
http://caml.inria.fr/.
Richard W.M. Jones ("rjones at redhat dot com")
© Red Hat Inc., 2011–2012
To get a list of bugs against libguestfs, use this link:
https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools
To report a new bug against libguestfs, use this link:
https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools
When reporting a bug, please supply:
- •
- The version of libguestfs.
- •
- Where you got libguestfs (eg. which Linux distro, compiled
from source, etc)
- •
- Describe the bug accurately and give a way to reproduce
it.
- •
- Run libguestfs-test-tool(1) and paste the
complete, unedited output into the bug report.