Be Book Kernel Kit Kernel Kit Indeks

Obrazy

Zadeklarowany w:  be/kernel/image.h
Biblioteka: libroot.so
Streszczenie:  więcej...

 

To nie jest o grafice. Obraz jest skomplilowanym kodem, którego istnieją trzy typy: obrazy aplikacji, obrazy bibliotek i obrazy wtyczek. Obraz aplikacji jest kodem wykonywalnym, który może być odpalany (uruchamiany). Obraz biblioteki jest kolekcją kodu współdzielonego, który przyłączasz do aplikacji gdy kompilujesz swoją aplikację. Obraz wtyczki jest kodem, który aplikacja może ładować i który działa gdy aplikacja jest uruchomiona. Zauważ, że wytczka może być również aplikacją; innymi słowy możesz tworzyć obraz, który może być uruchamiany przez samego siebie lub który może być ładowany do innej aplikacji.

Aby zdobyć więcej informacji o tworzeniu i używaniu obrazów, popatrz do rozdziału "Pojęcia obrazów".


Funkcje Obrazu


get_image_info() , get_next_image_info() , image_info

status_t get_image_info(image_id image, image_info *info)
status_t get_next_image_info(team_id team,
      int32 *cookie,
      image_info *info)
struct {} image_info

Te funkcje kopiują strukturę image_info do argumentu info dla indywidualnego obrazu. Funkcja get_image_info() podaje informację dla obrazu identyfikowanego przez argument image.

Funkcja get_next_image_info() pozwala Ci kroczyć poprzez listę obrazów zespołu dzięki kolejno powtarzanym wywołaniom. Argument team identyfikuje zespół do którego chcesz zaglądnąć; wartość team równa 0 oznacza zespół wywoływanego wątku. Argument cookie jest znacznikiem miejsca; ustawiasz go na 0 przy pierwszym wywołaniu i pozwalasz funkcji wykonać resztę. Funkcja zwraca wartość równą B_BAD_VALUE gdy nie ma więcej obrazów do odwiedzenia:

/* Uzyskaj image_info dla każdego obrazu w tym zespole. */
image_info info;
int32 cookie = 0;

while (get_next_image_info(0, &cookie, &info) == B_OK)
   ...

Strukturą image_info jest:


typedef struct {
         image_id id;
          image_type type;
         int32 sequence;
         int32 init_order;
         B_PFV init_routine;
         B_PFV term_routine;
         dev_t device;
         ino_t node;
          char name[MAXPATHLEN];
          void *text;
          void *data;
         int32 text_size;
          int32 data_size;
      } image_info

Polami są:

Oczywistymi stałymi image_type są :

Stałe image_type
B_APP_IMAGE
B_LIBRARY_IMAGE
B_ADD_ON_IMAGE

ZWRACANE KODY


get_image_symbol() , get_nth_image_symbol()

status_t get_image_symbol(image_id image,
      char *symbol_name,
      int32 symbol_type,
      void **location)
status_t get_nth_image_symbol(image_id image,
      int32 n,
      char *name,
      
int32 *name_length,
      int32 *symbol_type,
      void **location)

get_image_symbol() zwraca, w miejscu location, wskaźnik do adresu symbolu, który jest identyfikowany przez argumenty image, symbol_name i symbol_type. Przykład demostrujący użycie tej funkcji jest dany w rozdziale "Symbole."

get_nth_image_symbol() zwraca informację o n'tym symbolu w danym obrazie. Informacjajest zwracana w argumentach:

Pamiętaj, że name_length jest resetowany za każdym razem gdy wywołujeszget_nth_image_symbol(). Jeśli wywołujesz funkcję w sposób powtarzający się (to retrieve all the symbols in an image), potrzebujesz zresetować wartość name_length pomiędzy wywołaniami.

Aby uzyskać numery image_id na których te funkcje operują, użyj funkcji get_next_image_info(). Takie numery identyfikacyjne są również zwracane bezpośrednio gdy ładujesz obraz wtyczki poprzez funkcję load_add_on().

ZWRACANE KODY


load_add_on() , unload_add_on()

image_id load_add_on(const char *pathname)
status_t unload_add_on(image_id image)

load_add_on() ładuje obraz wtyczki, identyfikowany przez pathname, do przestrzeni adresowej Twojej aplikacji.

Przykład, który demonstruje użycie load_add_on() jest podany w rozdziale "Ładowanie obrazu wtyczki."

Możesz załadować ten sam obraz wtyczki dwa razy; za każdym razem ładuje nową wtyczkę, jest tworzony i zwracany unikalny numer image_id.

unload_add_on() usuwa obraz wtyczki identfikowany przez argument. Symbole obrazu są usuwane a pamięć, która je reprezentuje jest zwalniana. Jeśli argument nie identyfikuje prawidłowego obrazu, funkcja zwraca wartość równą B_ERROR. W przeciwnym wypadku zwraca ona B_OK.

ZWRACANE KODY

Dopdatnia wartość image_id value (ładowanie) lub


load_image()

thread_id load_image(int argc,
      
const char **argv,
      const char **env)

Ładuje obraz aplikacji do systemu (nie ładuje ona obrazu do przestrzeni adresowej tego, który ją wywołuje), tworzy oddzielny zespół dla nowej aplikacji i zapoczątkowuje i zwraca identyfikator głównego wątku zespołu. Obraz jest identyfikowany przez nazwę ścieżki dostępu daną w argv[0].

Argumenty sa przekazywane do funkcji main() (są one widoczne tam w górze jak podobnie nazwane argumenty funkcji):

extern char **environ;

load_image(..., environ);

The argv and envp arrays are copied into the new thread's address space. If you allocated either of these arrays, it's safe to free them immediately after load_image() returns.

Wątek, ktory jest zwrócony przez load_image() jest w stanie zawieszenia. Aby rozpocząć działanie wątku przekaż thread_id do resume_thread() lub wait_for_thread().

Przykład, który demonstruje użycie load_image() jest dany w "Ładowanie obrazu aplikacji."

ZWRACANE KODY


Be Book Kernel Kit Kernel Kit Indeks

Be Book,
...w ślicznym HTML...
dla BeOS wydanie 5

Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.