Donc, j'ai des données temporaires dans mon programme (en RAM). Je veux en quelque sorte faire sembler comme c'est un fichier (par exemple pour l'envoyer dans un autre programme qui prend un lien de fichier comme argument)? P>
est-ce possible? P>
Comment faire une telle chose? P>
5 Réponses :
Vous pouvez utiliser pipe ()
Pas une fonction Windows (voir Commentaire sur la question)
Oui, j'ai compris que, avant que la question n'ait été modifiée, aucun système d'exploitation n'a été spécifié
Bien que je suis d'accord, il n'est pas possible de faire la manière de faire de la Windows d'utiliser des fonctions POSIX telles que le tuyau sous Windows (par exemple en utilisant Cygwin), mais je suis d'accord que ce n'est pas la réponse que je donnerais pour Windows
Vous pouvez le faire en C à l'aide de la fonction Ceci est possible si votre programme externe lit son entrée de popen () code> Fonction:
stdin < / code>. p> p>
@Billy Oneal: C'est vrai, mais toute implémentation générale de C offre une fonction de type code> code> (bien qu'elle puisse être appelée _popen () code> comme dans MSVC).
Cela suppose également que l'OP souhaite exécuter / démarrer le programme externe de l'intérieur de l'intérieur qui détient les données. Néanmoins, cette solution est slick.
Sauf si vous êtes sous Windows. _Popen code> ne fonctionne pas correctement à moins que vous démarrez l'application donnée à l'aide du sous-système de console plutôt que du sous-système Windows.
En outre, vous ne pouviez pas passer le nom du tuyau à une autre application Windows en attendant un nom de fichier.
Oui, c'est possible. Vous pouvez transférer vos données sur votre autre application via un Communication interprocessante Mécanisme: P >
EDIT: MSDN répertorie tous les mécanismes IPC disponibles pour Windows ici . p>
Quels processus sont intercommunant? La réponse n'a pas de sens.
@samoz - The Op décrit deux programmes - son qui a les données dans la RAM qu'il souhaite envoyer, et une autre qui doit recevoir ces données. Programme == processus lorsqu'ils exécutent dans le système d'exploitation.
Si supporté par votre système d'exploitation (systèmes Unixoid et Windows DO), vous pouvez essayer d'utiliser Fichiers mappés de mémoire . P>
+1. De cette façon, les données ne sont pas copiées à moins que l'OS ne décide que cela doit être.
Pourquoi ne pas simplement écrire le fichier sur le disque? Si l'écriture sur le disque est trop lente, vous pouvez transmettre le drapeau Parfois, les solutions évidentes sont les meilleures ... p> fichier_attribute_temporary code> sur CreateFile pour conserver les données dans le cache (et évitez de l'écrire sur le périphérique physique). P>
C'est la bonne façon de le faire. +5 si possible.
+1 Mais je suppose que c'est une question de la taille de la grande cache et du fichier, et en espérant que le premier est plus grand que la seconde!
@MDMA: True, mais si le cache est trop petit pour s'adapter au fichier, vous pourriez faire valoir qu'il n'est probablement pas bon de garder le fichier entier en mémoire en premier lieu. La bonne chose à propos de file_attribute_temporary code> est que s'il n'y a pas assez d'espace dans le cache, cela utilisera toujours le système de fichiers afin que vous n'ayez pas à vous inquiéter.
Pourquoi ne pas: parce que vous copiez les données de votre i> RAM vers System i> RAM, en utilisant le double de la quantité de mémoire. Mémoire de mappage d'un fichier ne fait pas.
Quel système d'exploitation courez-vous?
Qu'est-ce qui ne va pas avec simplement écrire les données à un fichier "réel" et envoyer ce fichier comme un argument?
@Codeka: Je ne sais pas ... peut-être parce que l'accès au disque dur est UHM ... lent?
@Liranuna: Consultez ma réponse, l'écriture sur le disque ne doit pas i> être lente, en particulier pour les fichiers temporaires.