Comment écrire lorsque vous voulez gérer un "tableau de chaînes en langage C" comme argv [] dans Ruby-FFI

Selon ce site (bien que les informations puissent être obsolètes car il s'agit d'informations de 2009) https://zegoggl.es/2009/05/ruby-ffi-recipes.html

Lorsqu'il y a une définition de fonction comme ci-dessous

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

Ruby-FFI écrit:

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

Lors de l'utilisation ...

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)

Si vous le lisez, vous saurez ce que vous faites, mais c'est un peu ennuyeux.

Si vous connaissez un meilleur moyen, veuillez laisser un commentaire.

C'est tout pour cet article.

Recommended Posts

Comment écrire lorsque vous voulez gérer un "tableau de chaînes en langage C" comme argv [] dans Ruby-FFI
Comment écrire lorsque vous souhaitez conserver les sauts de ligne et la sortie tout en évitant XSS dans Rails
[java] Résumé de la gestion des chaînes de caractères
Lorsque vous souhaitez lier InputStream dans JDBI3
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Javaer résume comment écrire des propriétés C #
Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
Utilisez JLine lorsque vous souhaitez gérer les frappes sur la console caractère par caractère en Java
Lorsque vous souhaitez écrire explicitement OR ou AND avec ransack
Différences dans la gestion des chaînes entre Java et Perl
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Comparaison des chaînes de version lorsque vous souhaitez brancher le traitement entre deux versions (implémentation Java)
Traitement inutile des collections - je veux vous donner une chance d'écrire du bon code. 5 [Exemple de refactoring C #]
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Convertir un tableau de chaînes en une liste d'entiers en Java
Comment afficher une liste de chaînes dans JSF sous forme de chaînes séparées par des virgules
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]
Comment concaténer des chaînes avec Java
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
Résumé des moyens lorsque vous souhaitez communiquer avec HTTP sur Android
Comment convertir un tableau de chaînes en un tableau d'objets avec l'API Stream
Comment trouver le nombre total de pages lors de la pagination en Java
Comment contraindre l'action de la destination de transition lorsqu'elle n'est pas connectée
[java] Résumé de la gestion des caractères
Résumé de l'écriture des arguments d'annotation
Convertir un tableau de chaînes en nombres
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
Si vous souhaitez satisfaire la couverture de test des méthodes privées dans JUnit
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
J'ai fait un exemple de la façon d'écrire un délégué dans Swift UI 2.0 à l'aide de MapKit
Je veux que vous racontiez que l'erreur a été résolue lorsque vous avez poignardé le chargeur dans le coin de la tête