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

    [c/c++]Convogliamo System(option)

    Per prima cosa buona giornata a tutti.

    Ora vi espongo il mio dilemma.
    La mia domanda è: posso convogliare il risultato di una chiamata di sistem es: system("ls") in una stringa per poter cosi memorizzare il suo contenuto in una array in una stringa o simile?

    Per caso ci sono alternative ke non ho valutato? Magari posso eseguire il comando unix "ls" ugualmente dal programma c e convogliare il risulatato in una stringa?

    Auitatemi.

  2. #2
    Buona giornata anche a te.

    Leggi Questo 3d , trovo molto interessante la soluzione proposta da alwaysnew.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    credo si possa usare anche la popen se è disponibile. Prova a fare un #man popen#. Se ho ben capito se usi #popen(ls, "r")# puoi leggere da ciò che torna la popen come fosse un file l'output del comando. L'unico dubbio è cosa torna la fget/fread quando il programma si chiude (creo un EOF).

  4. #4
    ma non è possibile realizzarlo senza utilizzare i file?
    Anche se non dovessi usare la system.

    Come potrei da un programma server inviare il contenuto del comando unix ls al client.

  5. #5
    be se la popen fa quello che dice...in teoria non crei nessun file (in pratica usi le pipe). Quindi
    per mandare al client l'output di ls il server dovrebbe usare un codice del genere:
    codice:
      FILE *tmp_out = popen("ls -l", "r");
      if( !tmp_out )
         exit(1);
      char tmp_buff[1024];
      int tmp_r;
      while( (tmp_r = fread(tmp_out, tmp_buff, sizeof(tmp_buff))) != 0 )
      {
         invio al client i primi tmp_r caratteri di tmp_buff
      }
      pclose(tmp_out);
    Ho scritto senza provare quindi ci sono molte probabilità che ho frainteso qualcosa (in particolare ho assunto che la fread torni 0 quando ls è terminato). Comunque con un po' di prove si dovrebbe riuscire a farlo funzionare.
    Ripeto: se ho ben capito viene creata una pipe e non un file su disco (difatti inizialmente volevo vedere se si poteva cambiare gli handle dei file stdout e stdin per l'ls poi ho visto che esisteva una funzione che faceva tutto questo).

    Buone prove (e fammi sapere se funziona)

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.