PDA

View Full Version : [C] Come faccio ad eseguire i programmi?


Cadetto Entusiasta
19-02-2010, 15:57
Buongiorno a tutti. Mi scuso fin da subito per la mia ignoranza in fatto di Linux in generale, ma è da poco che ho fatto il grande salto e non sono ancora tanto abituato al nuovo ambiente. Comunque per il momento mi sto trovando alla grande..
A parte ciò, in Windows usavo per fare qualche programmino CodeBlocks, ma non è che mi piaceva tantissimo. Qui su Ubuntu, ho visto che c'è GCC che compila il programma, però facendo compilare ad esempio

#include <stdio.h>

#define EOL '\n'

int main()
{
int totR = 0;
int xc;

while ((xc=getchar()) != EOF)
{
if(xc==EOL)
totR++;
}

printf("In input ci sono %d righe\n", totR);
return 0;

}
per compilarlo faccio (una volta essere nella cartella dove si trova il file .c)
gcc contaR_2.c
Fin qui sono arrivato, non mi da nessun errore, perchè mi crea un file .exe. Però poi, come faccio a vedere l'esecuzione reale del programma??
E in generale, qualcuno mi può spiegare come si usa GCC?

cionci
19-02-2010, 16:00
Così ti crea un file chiamato a.out.
Per decidere tu il nome:

gcc sorgente.c -o nomeeseguibile

Per eseguire il comando:

./nomeseguibile

Cadetto Entusiasta
19-02-2010, 16:39
Ok, ci sono grazie.
L'unica cosa è che se appunto faccio ./contaR_2, mi parte il programma: conta quante r-R ci sono all'interno delle frasi che inserisco; però come faccio a fermare il conteggio?
Perchè se faccio Ctrl+Z lo fermo e non mi fa vedere niente, Ctrl+C esco e basta...

wingman87
19-02-2010, 19:19
Non ti fa vedere niente perché il programma termina. Puoi fare diverse cose: aggiungere una lettura alla fine del programma, oppure lanciare il programma da shell, oppure se sei su windows aggiungere un system("pause"); in fondo al programma (immagino ci sia anche un'equivalente unix).

cionci
19-02-2010, 19:23
Non ti fa vedere niente perché il programma termina. Puoi fare diverse cose: aggiungere una lettura alla fine del programma, oppure lanciare il programma da shell, oppure se sei su windows aggiungere un system("pause"); in fondo al programma (immagino ci sia anche un'equivalente unix).
Il problema è diverso. Il ciclo finisce solo quando trova EOF. In Linux EOF si ottiene con CTRL+D

wingman87
19-02-2010, 19:28
Ah, allora mi sono confuso, CTRL+Z cos'era? Forse addormenta il processo? O lo mette in background? Non ricordo più...
Beh, allora semplicemente deve premere CTRL+D e poi potrebbe ricadere nel problema a cui mi riferivo prima.

ndakota
19-02-2010, 19:46
Ah, allora mi sono confuso, CTRL+Z cos'era? Forse addormenta il processo? O lo mette in background? Non ricordo più...
Beh, allora semplicemente deve premere CTRL+D e poi potrebbe ricadere nel problema a cui mi riferivo prima.

Anche io ricordo ctrl-z. Sarà sotto Windows :p

khelidan1980
19-02-2010, 22:38
si ctrl z è l'eof su win

Cadetto Entusiasta
20-02-2010, 08:57
Ah ecco, io sapevo che l'EOF era Ctrl+Z, ma non sapevo che ero solo in Windows. Grazie per avermi detto del Ctrl+D....

YuYevon
20-02-2010, 11:37
ctrl+z su Linux invia al processo il segnale SIGSTOP, quindi non termina ma viene semplicemente sospeso. Si può riavviare inviandogli il segnale SIGCONT (ad esempio con kill -SIGCONT).