Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Zahami
    Registrato dal
    May 2009
    Messaggi
    59

    [C] Comando system() su linux: è diverso da Windows?

    Incomincio col dire che anche se è effettivamente una domanda (credo) molto facile, ho aperto un nuovo post perché non ho trovato risposta da nessuna parte, ne su google ne su questo forum (utilizzando il motore di ricerca del forum).

    Quando scrivo in C se voglio dare un comando direttamente dalla shell (per esempio per pulire lo schermo i rispettivi comandi sono 'cls' su Windows e 'clear' su linux) si usa il comando 'system()' mettendo come argomento ciò che prima avevamo definito per dare il comando.
    Per indenterci:
    codice:
    char* pulisci = "cls"; //(su windows)
    char* pulisci = "clear"; //(su linux)
    ...altri comandi...
    system(pulisci);
    Correggetemi se sbaglio...

    Comunque la domanda era questa:
    Quando usavo Windows il comando 'system()' funzionava ma ora che uso linux quando faccio
    codice:
    char* pulisci = "clear";
    ...altri comandi...
    system(pulisci);
    e cerco di compilarlo il compilatore mi da errore dicendo che 'system()' non è stato ancora dichiarato. Perché?
    Zahami

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Forse non includi l'header file stdlib.h in cui è dichiarata la funzione system()... se non è quello, riporta esattamente il messaggio di errore.
    every day above ground is a good one

  3. #3
    su linux non devi usare la system ma le exec... nelle loro varie incarnazioni, oppure apri un pipe unidirezionale con popen .

    ciao
    sergio

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ma la exec sostituisce l'immagine del processo corrente con un'altra relativa all'esecuzione del programma che le si passa in input... non può essere considerata un'alternativa a system() che non fa altro che eseguire un comando da terminale... bisognerebbe fare prima una fork(), ma non mi sembra il caso di scomodare tutto questo per una semplice pulizia del terminale
    every day above ground is a good one

  5. #5
    In ogni caso su Linux puoi evitare quella chiamata a system scrivendo una semplice funzione che usa le sequenze di escape ANSI:
    codice:
    void ClearScreen()
    {
        printf("\x1B[2J\x1B[1;1H");
    }
    A questo punto per pulire lo schermo ti basterà fare:
    codice:
    ClearScreen();
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di Zahami
    Registrato dal
    May 2009
    Messaggi
    59
    Ecco! ci sono riuscito...

    Aveva ragione YuYevon, non includevo l'header file stdlib.h perché su Windows utilizzavo un programma per la compilazione che includeva tutti i file header e quindi non ero abituato ad includerne nessuna e di conseguenza me lo sono dimenticato...

    Ma l''idea di MItaly è comunque valida ed è anche una bella trovata. Bravo!
    Zahami

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Zahami
    perché su Windows utilizzavo un programma per la compilazione che includeva tutti i file header
    DevCpp?
    every day above ground is a good one

  8. #8
    Originariamente inviato da Zahami
    Ecco! ci sono riuscito...

    Aveva ragione YuYevon, non includevo l'header file stdlib.h perché su Windows utilizzavo un programma per la compilazione che includeva tutti i file header e quindi non ero abituato ad includerne nessuna e di conseguenza me lo sono dimenticato...
    Probabilmente era gcc con certe impostazioni.
    Ma l''idea di MItaly è comunque valida ed è anche una bella trovata. Bravo!
    Grazie; tutto merito del mio odio viscerale per la funzione system .
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Zahami
    Registrato dal
    May 2009
    Messaggi
    59
    perché su Windows utilizzavo un programma per la compilazione che includeva tutti i file header
    DevCpp?
    Sì proprio quello
    Zahami

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 © 2025 vBulletin Solutions, Inc. All rights reserved.