Cout et Cin en Linux ne peut pas le voir à la console
Je viens de m'installer à partir de Windows à Linux et je vais essayer de créer une application simple qui ouvre une console, affiche un message et d'attendre sur une touche pour fermer. J'ai créé il sur Windows et ça marche, alors j'ai juste déplacé les fichiers de Linux. Je n'ai rien changer, juste compilé avec g++ et je n'ai pas d'erreurs. Le problème est que sur Linux (Ubuntu 12.04) je ne peux pas voir la console et un message me demandant d'appuyer sur une touche avant la fermeture. Mon code est aussi simple que cela:
#include <iostream>
#include <cstdio>
int main() {
cout << "Writing file...\n";
FILE *myfile = fopen("testfile.txt", "w");
fwrite("test", sizeof(char), 4, myfile);
fclose(myfile);
cout << "Press any key to exit...\n";
cin.ignore();
return 0;
}
Sur Windows, quand je lance le fichier exécutable, la console windows va me montrer les messages et fermer en appuyant sur n'importe quelle touche. Sous Linux, lorsque j'exécute le programme, je ne suis pas d'obtenir quoi que ce soit. Il crée le testfile.txt fichier et insérer le texte, de sorte cstdio fonctions liées fonctionne, mais je ne peux pas voir n'importe quelle console avec ces messages et je ne comprends pas pourquoi. Peut-être que je ne sais pas comment l'ouvrir d'un simple exécutable sous Linux. Ce que je veux, c'est à double-cliquer dessus et voir une console avec deux messages simples. Que faites-vous mince, j'ai fais de mal? Merci!
Aussi, j'utilise g++ pour compiler le fichier cpp: g++ -Wall -s -O2 test.cpp -o test
test
, que vous pouvez exécuter à partir d'une console en tapant ./test
à partir du répertoire où il se trouve.Il semble que vous l'exécutez à partir d'un bureau gui - il y a plus d'un de ceux utilisés sur Linux, vous avez probablement besoin de préciser laquelle (ou au moins la distribution que vous utilisez).
Désolé, j'ai tapé le code lettre par lettre, j'ai inséré quelques mauvais caractère. Le code compile, ce n'est pas le problème. Comme je l'ai dit, le fwrite œuvres, il crée un fichier texte. Ce que je ne peux pas voir, c'est une console affichant moi les messages. Je ne veux pas utiliser le terminal pour cela, je veux juste de cliquer dessus et d'ouvrir la console avec les messages sur elle
OriginalL'auteur ali | 2012-12-10
Vous devez vous connecter pour publier un commentaire.
Sur Windows "naturel" de la forme d'une application est une application graphique. Lorsque vous exécutez une application console, le système crée une fenêtre pour exécuter une console et exécute l'application dans la fenêtre. Ce qui est fait par Windows, il n'est pas une propriété inhérente de C++ et n'est pas impliquée par le code que vous avez écrit.
C++ n'est pas faire cela automatiquement et les systèmes de type UNIX ne pas le faire pour vous.
Sur les systèmes de type UNIX, le "naturel" type d'application est (sans doute) une application de console et vous pouvez généralement les exécuter de un terminal ou une console.
Lorsque vous exécutez votre programme de la sortie passe à la borne où votre session X11 est en cours d'exécution, mais vous ne le voyez pas parce que la session X11 est le contrôle de votre écran.
De sorte à obtenir le comportement que vous voulez, tout d'abord ouvrir un terminal, puis exécutez le programme.
Pour faire fonctionner le programme dans un terminal, essayez d'exécuter quelque chose comme
xterm -e ./test
À faire que automatique vous pourriez kluge avec quelque chose comme:
Maintenant, si vous exécutez le programme avec l'argument
-xterm
, il sera exécuté dans un terminal.N. B. j'ai corrigé ton code non portable à utiliser
std::
de qualification sur les noms de<cstdio>
exec
exemple. Malheureusement je ne peux pas-de voter une deuxième fois.OriginalL'auteur Jonathan Wakely
Windows ouvre une console, car c'est la seule façon que stdio va travailler dessus. Linux n'est pas depuis stdio peut fonctionner sans elle (avec la production de la session X, journal des erreurs,
~/.xsession-errors
par défaut). Si vous voulez avoir stdio accessible à l'utilisateur, alors vous devez ouvrir un terminal et de l'invité de commande et exécutez le fichier exécutable.Ce qui n'aidera pas. La même chose va se produire. Créer un .fichier de bureau à la place qu'il fonctionne dans un terminal.
Je pense que vous avez raison. Donc, il n'y a pas moyen d'ouvrir le terminal à partir de l'exécutable, puis, afficher les messages. Si je veux de la sortie à l'écran, je doit d'abord ouvrir le terminal, puis exécutez le programme à partir. Supposons que c'est la façon dont les choses fonctionnent sur Linux.
pas besoin de
fork
, justeexec
à remplacer l'actuel processus avec un terminal exécutant le même binaireJ'ai mis à jour ma réponse avec un exemple de le faire
OriginalL'auteur Ignacio Vazquez-Abrams
Vous n'avez pas dit votre environnement de bureau pour exécuter le programme dans une fenêtre de terminal. Votre programme ne dit pas, c'est juste écrit sur sa sortie standard.
De voir la sortie standard du programme, le mieux est d'ouvrir une console, et tapez le nom du programme compilé pour l'exécuter. La sortie standard du programme seront affichés dans la même fenêtre.
OriginalL'auteur Jo So
au lieu
faire un
dans le répertoire que vous avez fait la compilation, démarrer le programme dans une fenêtre de terminal avec:
puis, il écrit "de l'Écriture du fichier..." et "Appuyez sur une touche pour quitter..." sur la sortie standard, et il est nécessaire d'appuyer sur une touche pour terminer l'application.
Ce n'était pas moi. Pourtant, cela ne fonctionne toujours pas
voir modifier. ajout d'un peu plus de clarifier
OriginalL'auteur Julien May