Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Ruby und C

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 31. Jul 2001 15:21   Titel: Ruby und C

Hi!

Ich habe zwei Fragen zur Kombination aus Ruby und C. Die zweite Frage hat eine reine C-Unterfrage.

Das Buch "Programming Ruby" mag zwar sehr gut sein, aber bei diesem Thema etwas unvollständig. Und Japanisch kann ich leider nicht so gut...

1.)

Ich möchte von C aus eine Ruby-Funktion aufrufen. Also eine, die nicht innerhalb von einer Klasse definiert wurde. Man muss aber bei den Aufrufen aus C heraus ein Objekt angeben, dass als Empfänger fungiert. Ein einfaches "puts self" gibt da "main" aus, und ich habe herausgefunden, dass main vom Typ Object ist (in C also rb_cObject). Nur wie komme ich an dieses Objekt ran? rb_gv_get("main") funktioniert jedenfalls nicht. Statt rb_funcall() könnte ich zwar rb_eval_string() verwenden, aber das muss doch auch "normal" gehen.

2.)

Ich möchte den Ruby-Interpreter in ein C-Programm einbetten. Dabei soll Ruby-Code aus einer Datei ausgeführt werden, doch das Programm soll nicht komplett beendet werden, wenn der Ruby-Interpreter die Datei verarbeitet hat. Mit rb_load_file() die Datei zu laden und per ruby_run() loszulegen funktioniert also nicht.

Muss ich hier den Code manuell einlesen (Wie liest man am besten in C eine ganze Datei in einen einzelnen String ein? Per mmap()?) und dann selbst rb_eval_string() darauf loslassen? Wird das funktionieren, d.h. kommt rb_eval_string() mit Newlines klar? Gibt es eine halbwegs elegante Lösung, weil das wäre ja irgendwie grässlich, wenn ich das so lösen müsste.

Cheers,
Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 01. Aug 2001 23:22   Titel: Re: Ruby und C

Hi!

Heute wurde mir schlagartig klar, wie ich sehr einfach eine Datei verarbeiten lassen kann: Es geht mit

rb_eval_string ("require ('brim_config.rb')");

Damit kann ich leben. :)

Cheers,
Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 02. Aug 2001 20:19   Titel: Re: Ruby und C

Hi nochmal!

Falls es mal jemanden interessieren sollte: Noch einfacher ist rb_require(). Ich wollte übrigens Ruby zusammen mit pthreads verwenden, aber das ist nicht möglich, der Ruby-Interpreter dreht dabei durch. Man muss Rubys eigenes Threading verwenden. Das sieht dann so aus:

Datei in einen Thread abarbeiten lassen geht ziemlich simpel per

VALUE script_thread = rb_thread_create (rb_require, (void *) script_name);

Um dann auf den Thread zu warten, ist nur ein

VALUE result = rb_funcall (script_thread, rb_intern ("value"), 0);

nötig. Statt "value" kann man auch "join" verwenden, wenn man nicht am Rückgabewert interessiert ist.

Cheers,
Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy