pour une application C ++, comment puis-je forcer programmatiquement une fin de fichier (EOF) sur stdin? p>
3 Réponses :
Si vous êtes sur un terminal dans un système de type UNIX, appuyez sur Edit: Ayant vu le désir de le faire "de manière programmatique", je suggère d'essayer Ctrl-D code>. Dans Windows,
Ctrl-Z code>. P>
fclose (stdin) code>. Si vous n'êtes pas assez bon, une idée plus belle peut être d'utiliser
std :: cin.rdbuf () code> pour définir le flux pour désigner une autre chose que la vraie stdin, puis faites ce que vous voulez ce flux. Mais cela commence à sentir mal, comme vous vous battez contre l'ordinateur, alors j'aimerais en savoir plus sur ce que l'objectif réel est. P>
Mais cela provient d'une application C ++, l'envoi de Ctrl-D travaille-t-il?
Oh je vois "de manière programmatique" maintenant. Peut-être que vous pouvez décrire plus en détail ce que vous essayez de faire?
J'essaie de résoudre: Stackoverflow.com/Questtions/4701282/...
Aha! Ensuite, la solution réelle consiste à utiliser libssh code> ou
libsssh2 code>, plutôt que d'appeler
popen () code> de c seul pour invoquer
ssh (1) code> qui est lui-même un autre programme C. Découpez les intermédiaires!
@Johnzwinck, mais Ctrl-Z ne fonctionne pas pour moi, cela me donne un ^ z code>, qu'est-ce qui ne va pas?
En fait, vous ne pouvez pas. Tant que vous pouvez lire des données de Stdin, EOF n'a pas été atteinte et, en fait, vous ne pouvez jamais l'atteindre. Vous pouvez fermer le Après cela, vous ne pouvez pas lire les données de stdin code> lui-même. Pour le fermer, faites ceci:
stdin code>. P> p> p>
Il y a une belle petite fonction disponible pour chaque flux créé spécialement pour cela.
Sa syntaxe est quelque chose comme:
Donc, dans votre code, vous pouvez avoir une condition simple qui déclenche quelque chose comme: p>
La documentation pour cela est assez clairsemée mais certaines sur CPPrefreence.com et Cplusplus.com < / a>. p> p>
Comment voulez-vous dire «force EOF sur Stdin '? Vous pouvez fermer Stdin (ou Cin). Vous auriez pu terminer votre boucle unilatéralement. Vous pouvez chercher à la fin du fichier (mais cela ne vous aidera pas avec un terminal ou un tuyau comme entrée). Vous pourriez être capable de forcer le problème avec
freopen () code>; Réaffecter la saisie standard à lire depuis / dev / null ou nul :.