J'ai une application Win32 écrite en C qui peut avoir sa sortie de console via printf () em> redirigé vers un fichier journal. P>
Ce serait bien si je pouvais avoir mon application. Détecter s'il avait été démarré avec ou sans redirection '>'. P>
Des idées? P>
5 Réponses :
afaik la réponse à ceci est que vous ne pouvez pas. La redirection de sortie fonctionne simplement en lisant simplement le flux de sortie à partir d'un programme donné et en la redirigeant à un autre tuyau / flux. La conception des fichiers / flux est telle que l'auteur ignore le lecteur au point que vous ne devriez pas savoir que vous êtes en train de lire. p>
Détecter même qu'il y avait un lecteur n'aurait aucune utilité car il y en a un dans le cas normal. La console lit la sortie de votre programme et l'affiche déjà à l'écran. p>
Je pense que les tuyaux sont aveugles par nature, de sorte que vous n'avez pas de manière intégrée pour savoir si vous êtes redirigé. De plus, essayant de découvrir ce qui se passe derrière une couche d'abstraction est une mauvaise habitude. p>
Si vous avez vraiment besoin de contrôler votre sortie, ajoutez le nom du fichier journal sous forme de paramètre de ligne de commande! strong> p>
Cela étant dit, vous pouvez faire des devinières intelligentes pour savoir: p>
Il peut y avoir un moyen de faire cela - un rapide Google a donné ce Hit A> cela pourrait vous donner l'allusion dans la bonne direction. P>
@Adam: En fait, cela m'a surpris, donc non, je n'ai pas essayé. Je ne pensais pas que c'était possible non plus! :)
FYI, ce lien vers CodeGear est mort et cela ne se présente pas non plus dans la machine de navigager.
Tom, merci pour l'entrée.
J'ai fait des expériences et j'ai trouvé ces œuvres pour moi .. p> lorsque la sortie d'une application est redirigée vers un fichier , fgetPos () définit "POS" à zéro. Cela a du sens depuis sa fraîchement ouvert Sterr pour vous. Lorsque la sortie d'une application n'est pas redirigée - il va sur le périphérique de la console - pas un fichier, Donc, FgetPos () définira «POS» à -1. P> p>
Méthode de Microsoft: WriteConsole échoue s'il est utilisé avec une poignée standard qui est redirigée vers un fichier. Si une application traite une sortie multilingue pouvant être redirigée, déterminez si la poignée de sortie est une poignée de console (une méthode consiste à appeler le getconsolemode fonctionne et vérifiez si cela réussit). P>
Afaik, ce n'est pas possible. Je vais donc lire ceci pour voir si je me trompe ...
Aucun moyen de savoir. J'ai vu des programmes qui permettent une option de ligne de commande de faire différentes fonctionnalités qui sont souvent activées lorsque la sortie est redirigée.
Pas sûr à 100% sous Windows, mais à Linux, de nombreux programmes qui se comportent différemment si vous ... L'exemple le plus courant est "LS".
Merci Fortran, j'ai oublié de dire que je codérise pour Windows.
Duplicatural possible de Comment vérifier si mon application de console Delphi est redirigée vers un fichier ou un tuyau?
@fortran: En fait, le programme "LS" de gnuwin32 fait i> se comporte différemment si cela vous convient tout comme il fait sous Linux, il y a donc définitivement un moyen d'obtenir ce comportement.