Wie schreibe ich, wenn ich mit "C language string array" wie argv [] in Ruby-FFI umgehen möchte?

Laut dieser Website (obwohl die Informationen möglicherweise veraltet sind, da es sich um Informationen aus dem Jahr 2009 handelt) https://zegoggl.es/2009/05/ruby-ffi-recipes.html

Wenn es eine Funktionsdefinition wie unten gibt

int execvp(const char *file, char *const argv[]);

Ruby-FFI schreibt:

module Exec
  extend FFI::Library
  attach_function :execvp, [:string, :pointer], :int
end

Beim Benutzen ...

strptrs = []
strptrs << FFI::MemoryPointer.from_string("vim")
strptrs << FFI::MemoryPointer.from_string("/tmp/foo")
strptrs << nil

# Now load all the pointers into a native memory block
argv = FFI::MemoryPointer.new(:pointer, strptrs.length)
strptrs.each_with_index do |p, i|
    argv[i].put_pointer(0,  p)
end

Exec.execvp("vim", argv)

Wenn Sie es lesen, wissen Sie sofort, was Sie tun, aber es ist ein wenig nervig.

Wenn Sie einen besseren Weg kennen, hinterlassen Sie bitte einen Kommentar.

Das ist alles für diesen Artikel.

Recommended Posts

Wie schreibe ich, wenn ich mit "C language string array" wie argv [] in Ruby-FFI umgehen möchte?
So schreiben Sie, wenn Sie Zeilenumbrüche und Ausgaben beibehalten und XSS in Rails vermeiden möchten
[java] Zusammenfassung des Umgangs mit Zeichenketten
Wenn Sie InputStream in JDBI3 binden möchten
[Hinweis] [Anfänger] Schreiben, wenn der Wert eines Array-Elements in einem sich wiederholenden Satz von Ruby geändert wird
Javaer fasst zusammen, wie C # -Eigenschaften geschrieben werden
Offline-Echtzeit-Schreibweise Implementierungsbeispiel für das Problem in E05 (Ruby, C11)
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Vergleich von Versionszeichenfolgen, wenn Sie die Verarbeitung zwischen zwei Versionen verzweigen möchten (Java-Implementierung)
Verschwenderische Verarbeitung von Sammlungen - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 5 [C # Refactoring Sample]
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
Verwandeln Sie ein Array von Strings in eine Liste von Ganzzahlen in Java
So geben Sie eine Liste von Zeichenfolgen in JSF als durch Kommas getrennte Zeichenfolgen aus
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
So verketten Sie Zeichenfolgen mit Java
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Zusammenfassung der Mittel, wenn Sie mit HTTP unter Android kommunizieren möchten
So konvertieren Sie ein Array von Strings mit der Stream-API in ein Array von Objekten
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
So beschränken Sie die Aktion des Übergangsziels, wenn Sie nicht angemeldet sind
[java] Zusammenfassung des Umgangs mit char
Zusammenfassung zum Schreiben von Anmerkungsargumenten
Konvertieren Sie ein Array von Zeichenfolgen in Zahlen
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
Wenn Sie die Testabdeckung privater Methoden in JUnit erfüllen möchten
Wenn Sie irgendwo einen Fehler melden möchten, wenn Sie graphql-spring-boot mit Spring Boot verwenden
Ich habe ein Beispiel erstellt, wie ein Delegat in Swift UI 2.0 mit MapKit geschrieben wird
Ich möchte, dass Sie die Geschichte erzählen, dass der Fehler behoben wurde, als Sie das Ladegerät in die Ecke Ihres Kopfes gestochen haben