Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] Eseguire comandi di sistema

    ho visto che è possibile eseguire comandi di sistema con system().
    il problema però è che questo comando alla fine restituisce un int.
    come posso fare per recuperare solo l'output del comando in modo da passarlo poi a un componente grafico tipo area di testo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io leggerei qui sulla popen oppure puoi seguire due vie

    1. system("comando > file"); e leggi il file
    2. system("comando.sh" ) ed esegui uno script che fa la scrittura su file

    a te la scelta

    ps controlla che le varie operazioni siano cmq supportate!!!
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: [C++] Eseguire comandi di sistema

    Originariamente inviato da fermat
    ho visto che è possibile eseguire comandi di sistema con system().
    il problema però è che questo comando alla fine restituisce un int.
    come posso fare per recuperare solo l'output del comando in modo da passarlo poi a un componente grafico tipo area di testo?
    Parli di Windows o Linux?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    in verità starei cercando di fare una cosa il pù possibile omogenea se possibile.
    sennò ora sto windows.
    ho provato questo:
    codice:
        FILE *p = popen("dir", "r");
        QString s;
        std::ifstream p2(fileno(p)); // ERRORE
        p2 >> s;
        p2.close();
        pclose(p);
        return s;
    ma ottengo un pò di errori.
    il primo è questo:
    error: invalid conversion from 'int' to 'const char*'

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ovviamente hai letto il messaggio a metà.
    Devi cmq vedere come sono le funzioni (le API in pratica) e come si usano sulla piattaforma da te scelta, questa è un'operazione che bisogna fare per ogni tipo di funzione che si intende utilizzare
    RTFM Read That F*** Manual!!!

  6. #6
    ok così funziona (su windows almeno):
    codice:
    string Scan::scanNetwork()
    {
        string cmd = "dir";
        char *buf = &cmd[0];
        FILE *p = popen("dir", "r");
        string s;
        for (size_t count; (count = fread(buf, 1, sizeof(buf), p));)
        {
            s += string(buf, buf + count);
        }
        pclose(p);
        return s;
    }

  7. #7
    ho giusto un cosa che mi da un pò fastidio, ma nn so se si può rimediare.
    quando lancio la funzione mi si apre una finestra di terminale fino a che nn ha finito il comando.
    penso sia normale ma nn è proprio belliissimo diciamo.
    si può ovviare alla cosa?

  8. #8
    In linea di massima dovresti evitare di lanciare comandi esterni per parsarne l'output (operazione inefficiente e non sempre facilissima) e usare invece le funzioni che il sistema operativo ti mette a disposizione. Ad esempio, per ottenere la lista dei file puoi usare opendir/readdir/closedir su sistemi Unix-like, o FindFirstFile/FindNextFile/FindCloseFile su Windows.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    si questo lo immaginavo.
    solo che quello che mi sto facendo è una gui per nmap quindi i comandi che devo lanciare sono quelli di nmap.....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.