Как показать терминал в приложении Linux? - PullRequest
0 голосов
/ 10 апреля 2011

Мне было интересно, можете ли вы это сделать, поэтому, когда вы нажимаете на программу в Linux, она всегда автоматически вызывает командную строку для отображаемой информации или если я решил использовать ncurses для интерфейса.Если это так, это системный вызов или вы можете сделать это с помощью ncurses?Потому что половина моей программы будет через терминал.

Спасибо

Ответы [ 3 ]

1 голос
/ 03 октября 2011

Поскольку Нитт не позволил бы мне изменить его фрагмент кода, я публикую исправленный фрагмент на тот случай, если кто-то захочет его использовать:

#include <cstdio>
#include <unistd.h>
#include <iostream>

int main(int argc, char* argv[])
{
    if (isatty(0))
    {
        std::cout << "Hello, World!" << std::endl;

        for (int i=0; i<argc; i++)
            std::cout << "arg: " << i << "\t" << argv[i] << std::endl;

        std::cout << "Press return to continue . . ." << std::flush;
        std::cin.get();
    }
    else
    {
        const char* args[argc+3], **it=args;
        *it++ = "gnome-terminal";
        *it++ = "-x";
        it = std::copy(argv, argv+argc, it);
        *it++ = 0;

        if (-1 == execvp("gnome-terminal", (char* const*) &args[0]))
            perror("exec");
    }
}
0 голосов
/ 03 октября 2011
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int fileExists(string x321) {
ifstream x123 (x321.c_str());
string x213;
    x123 >> x213;
    if (x213 == "") {
        return false;
    } else {
        return true;
    }   

}

int createConsole(string fname) {
    if (fileExists("~tmp") == false) {
        ofstream tmp ("~tmp");
        tmp << "tmpfile";
        fname = "gnome-terminal -e " + fname;
        system(fname.c_str());
            system("exit");
        return 0;
    }
    remove("~tmp");
    return 1;
}

int main(int argc, char** args) {
            createConsole(args[0]);
        cout << "Hello, World!" << endl;
        cout << "Press return to continue . . .";
        cin.get();

}

Обратите внимание на функции «createConsole» и «fileExists». Я написал это сам.

0 голосов
/ 10 апреля 2011

Да, просто вызовите терминал с вашим приложением.Например:

rxvt -e myapp

Запускает терминал, на котором работает ваше приложение.Вы также можете использовать xterm.Если вы хотите использовать широкие символы / юникод, я рекомендую rxvt-unicode .

. Вы можете поместить это в файл .desktop с указанным там значком, который затем будет помещен вСистемное меню.

...