2013-04-16 4 views
0

Je suis assez nouveau à la programmation parallèle. Dans mon programme C, j'ai besoin d'afficher mes données statistiques sur le terminal qui est différente de la principale.Comment ouvrir un nouveau cmd connecté au cmd principal dans C

Je veux dire:

Je suis un simple éditeur de mise en œuvre du texte. Pendant que l'utilisateur écrit une donnée, je tiens la taille de la lettre à l'aide d'un fil. Je veux afficher la taille de la lettre à tout moment, mais ce n'est pas possible car l'utilisateur est interrompu pendant la saisie. Par conséquent, je pense ouvrir une nouvelle fenêtre d'invite de commande et afficher cette information de taille de lettre là.

Comment puis-je faire cela? J'utilise le compilateur g ++ dans Ubuntu.

Merci

+0

Qu'avez-vous essayé? Comment ça n'a pas fonctionné? Pensez-vous que vous voulez avoir deux threads indépendants en cours d'exécution? Est-ce que ça doit être une fenêtre différente? – Floris

+0

Je peux déjà obtenir une information sur la longueur de la chaîne. L'utilisateur commence à écrire quelque chose sur l'invite de commande (j'ai utilisé la fonction en boucle getchar()). Quand un nouveau caractère est extrait de l'utilisateur, le thread est activé et incrémente le # des caractères. Le problème est le suivant: Je veux afficher la taille du caractère pendant que l'utilisateur tape. Je peux imprimer les données à l'écran, mais cela se passe juste quand l'utilisateur tape. Donc, je veux utiliser une fenêtre différente .. (En fait, c'est exactement la même idée avec cette boîte de commentaire, ## caractères gauche est écrit quand j'écris). – skynyrd

Répondre

0

Je ne pense pas que vous devez lancer un nouveau shell pour afficher la ligne. Si ce que vous voulez est comme la boîte de commentaires, donner à ce essayer (NB: Je ne l'ai pas mis en œuvre aucun caractère d'échappement, de sorte backspace et évasion ne fonctionnera pas)

Had un peu d'aide d'ici What is Equivalent to getch() & getche() in Linux?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define MAXLEN 255 
#ifdef _WIN32 
#include <conio.h> 
#else 
#include <termios.h> 

static struct termios old, newT; 

/* Initialize new terminal i/o settings */ 
void initTermios(int echo) 
{ 
    tcgetattr(0, &old); /* grab old terminal i/o settings */ 
    newT = old; /* make new settings same as old settings */ 
    newT.c_lflag &= ~ICANON; /* disable buffered i/o */ 
    newT.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */ 
    tcsetattr(0, TCSANOW, &newT); /* use these new terminal i/o settings now */ 
} 

/* Restore old terminal i/o settings */ 
void resetTermios(void) 
{ 
    tcsetattr(0, TCSANOW, &old); 
} 

/* Read 1 character - echo defines echo mode */ 
char getch(int echo) 
{ 
    char ch; 
    initTermios(echo); 
    ch = getchar(); 
    resetTermios(); 
    return ch; 
} 
#endif // _WIN32 


int main() 
{ 
    char arrayInput[MAXLEN + 1]; 
    static char printArray[MAXLEN + 15]; 
    static char tmp[5]; 
    char c; 
    int i,len=0; 
    printf("Begin\n"); 
    for(i=0;i<MAXLEN;i++) 
    { 
     putchar('\r'); 
     c = getch(); 
     for(len=0;len<MAXLEN;len++) 
      putchar(' '); 
     putchar('\r'); 
     arrayInput[i]=c; 
     arrayInput[i+1] = '\0'; 
     strcpy(printArray,""); 
     strcpy(printArray,arrayInput); 
     strcat(printArray," Size is:: "); 
     sprintf(tmp,"%d",i+1); 
     strcat(printArray,tmp); 
     printf("%s",printArray); 
    } 
    return 0; 
}