|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Programmare in c con Mandrake
Ciao
![]() Mi consigliate un buon programmino, semplice e potente (stile dev c++ per intenderci) con cui programmare in C? Nei cd della Mandrake 9.1 c'e' una milionata di programmi, e mi sono un po' perso Ho provato kDevelop, e sarebbe anche un bel programmino se non ti costringesse a creare dei progetti per ogni cosa: ho fatto un programmino semplice per provare i primi comandi sui processi (1,5 kb), e lui mi ha costretto a creare un progetto di decine di file inutili (1,5 mb).... ![]() Ma e' possibile che non si possa fare altrimenti? Se volessi scrivere il classico "Hello world" sono per forza costretto a sorbirmi l'ingombrantissimo contorno? Allora ho provato Kate. Certo, non ha le comodita' di kDevelop (e di Dev c++ ...... ahhhh, che gran bel programma.... possibile che non ci sia l'equivalente su Linux?), ma almeno non mi costringe a fare cose che non voglio. Certo, poi devo compilare con gcc, e non e' il massimo della vita (anche perche' non ho ben capito le varie opzioni che offre). Un altro paio di domande e chiudo ![]() Sotto win quando compilo il file "pippo.c" mi da "pippo.exe", che e' un eseguibile, e che quindi posso provare semplicemente cliccandoci sopra. In Linux invece mi da "pippo.o" Qual'e' il comando per eseguirlo? Questa invece non riguarda linux, ma il c in generale. Immaginiamo che il main si trovi nel file "main.c" In "pippo.c" ci sono delle funzioni che ho scritto io, e che vorrei usare in "main.c" Per far capire questa cosa al compilatore, cosa devo dirgli? Grazie ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
se non vuoi interfacce in stile visual c++ basta un editor qualunque (da bluefish a gedit, a kedit, a vi, a emacs) ecc...
il .o è un file oggetto, non è un esegubile (gcc dovrebbe dare un .out alla fine). il .out si lancia con ./nome.out che linea usi per gcc? fossi in te non abbandonerei gcc per nulla al mondo! tenere due finestre aperte non è poi così impossibile, su una scrivi e sull'altra lanci gcc (il comando tra l'altro ti rimane nell'history, lo puoi richiamare con la freccia su). per c++ devi usare g++ . se usi emacs puoi anche compilare nella stessa schermata dell'editor. se vuooi un buon libro che ti spieghi la programmazione c/c++ su linux lo trovi su www.advancedlinuxprogramming.com sono dei pdf da scaricare. nei primi capitoli ti spiega anche come usare gcc. per l'ultima domanda... non ho capito se vuoi una cosa tipo #include "pippo.c" o se intendi la linea di comando da usare cc -c main.c -o main.o cc -c pippo.c -o pippo.o cc main.o pippo.o -o ciao ciao |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Oltre agli editor che ti ha suggerito NA01 io aggiungerei anche Quanta:
è ottimo dato che ti consente anche di scegliere l'high-light mode a seconda del codice che devi scrivere(c/c++, php,etc...) Se invece vuoi un ide meno "inglobante" di kdevelop, puoi utilizzare anjuta.
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9302
|
guarda che dev-c++ c'è anche per linux, vai sul sito del produttore e vedrai che c'è, ma non so se si può scaricare, altrimenti lo cerchi in rete.
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Editor di testo e linea di comando...niente di meglio per cominciare e capire i meccanismi basilari...
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Sep 1999
Città: Messina
Messaggi: 1807
|
Quote:
Posto le mie domande: 1)Sotto Gcc, con quale funzione si pulisce lo schermo e a quale libreria fa riferimento? 2)e per getch() va bene la libreria curses.h o ce ne sono altre? C i a o.
__________________
with Free Software you have Freedom (Richard Stallman) |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Grazie a tutti
![]() Ho optato per Kate (che ti permette anche di compilare senza dover cambiare applicazione, visto che in finestra ti mette la console), e dopo un periodo di assestamento, comincio a trovarmici discretamente bene ![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Ragazzi, ora ho una domanda di quelle difficili
![]() Sto muovendo i primi passi coi semafori, e ho scritto questo programmino: il classico programma del Produttore-Consumatore. Il processo padre crea due figli e rimane in attesa. Il primo chiama la funzione "produttore", che manda un msg a video, prende una stringa dalla tastiera, e la copia in un'area di memoria condivisa. Il secondo invece chiama la funzione "consumatore", che legge la stringa dalla mem condivisa e la stampa a video. La cosa si ripete (con un ciclo) fino a quando l'utente non inserisce la stringa "quit". Chiaramente i due processi non possono accedere contemporaneamente alla memoria, e l'esclusione avviene con i semafori. Dico subito che c'e' un errore: infatti non c'e' niente che impedisca al consumatore di entrare nell'area critica prima del produttore (e la cosa non dovrebbe accadere). Il padre genera prima il produttore, che quindi in genere riesce ad accedere alla memoria prima dell'altro, ma e' cmq una soluzione scorretta. Il problema pero' e' un altro: il consumatore non riesce ad entrare nell'area critica prima della morte del produttore. Esempio di esecuzione: >Inserisci il dato ('quit' per uscire): pippo >Inserisci il dato ('quit' per uscire): pluto >Inserisci il dato ('quit' per uscire): quit >quit Mentre invece dovrebbe essere: >Inserisci il dato ('quit' per uscire): pippo >pippo >Inserisci il dato ('quit' per uscire): pluto >pluto >Inserisci il dato ('quit' per uscire): quit >quit Ecco il codice: ---------------------------------------- ------------ #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/sem.h> #include <stdio.h> /* Produttorre-Consumatore con i semafori */ /* Metodi per le operazioni sul semaforo */ int waitSem(int ds_sem) { struct sembuf oper; oper.sem_num = 0; oper.sem_op = -1; oper.sem_flg = 0; return semop(ds_sem, &oper, 1); } int signalSem(int ds_sem) { struct sembuf oper; oper.sem_num = 0; oper.sem_op = +1; oper.sem_flg = 0; return semop(ds_sem, &oper, 1); } ----- /* Metodo produttore di dati. Chiede il dato e lo memorizza in memoria condivisa */ void produttore(int ds_mem, int ds_sem) { void *indirizzo; int ret; char dato[256]; /* Attacco la memoria allo spazio di indirizzamento */ indirizzo = shmat(ds_mem, 0, SHM_W); if( indirizzo == (void*) -1 ) printf("Errore nella shmat del produttore\n"); /* Produco */ do{ ret = waitSem(ds_sem); if(ret == -1) printf("Errore nella wait del produttore\n"); printf("Inserisci il dato ('quit' per uscire): \n"); scanf("%s", dato); /* Inizio area critica */ strcpy(indirizzo, dato); /* Fine area critica */ ret = signalSem(ds_sem); if(ret == -1) printf("Errore nella signal del produttore\n"); }while( (strcmp(dato, "quit") != 0) ); exit(0); } ----- /* Metodo consumatore. Prende il dato dalla memoria condivisa e lo mette a schermo */ void consumatore(int ds_mem, int ds_sem) { void *indirizzo; char dato[256]; int ret; /* Attacco la memoria allo spazio di indirizzamento */ indirizzo = shmat(ds_mem, 0, SHM_R); if( indirizzo == (void*) -1 ) printf("Errore nella shmat del consumatore\n"); /* Consumo */ do{ ret = waitSem(ds_sem); if(ret == -1) printf("Errore nella wait del consumatore\n"); /* Inizio area critica */ strcpy(dato, indirizzo); /* Fine area critica */ ret = signalSem(ds_sem); if(ret == -1) printf("Errore nella signal del consumatore\n"); printf("%s\n", dato); }while( (strcmp(dato, "quit") != 0) ); exit(0); } ----- /* Metodo Main */ int main() { int ds_shm, ds_sem, ret, status; long chiave_shm = 30, chiave_sem = 50; /* Inizializzo il fottuto semaforo */ ds_sem = semget(chiave_sem, 1, IPC_CREAT | 0666); if(ds_sem == -1) printf("Errore nella creazione del semaforo\n"); ret = semctl(ds_sem, 0, SETVAL, 1); /*Inizializzo la memoria condivisa*/ ds_shm = shmget(chiave_shm, 256, IPC_CREAT | 0666); if( ds_shm == -1 ) printf("Errore nella creazione della memoria\n"); /* Facciamo nascere i due figli */ if(fork() != 0) { if(fork() != 0) { wait(&status); wait(&status); } else consumatore(ds_shm, ds_sem); } else produttore(ds_shm, ds_sem); /* Elimino la memoria condivisa */ ret = shmctl(ds_shm, IPC_RMID, NULL); if(ret == -1) printf("Errore nella rimozione della memoria\n"); /* Elimino il fottutissimo semaforo */ ret = semctl(ds_sem, 0, IPC_RMID, 1); if(ret == -1) printf("Errore nella rimozione del semaforo\n"); } /* Fine del main */ ---------------------------------------- ------------ Se avete letto fino a qui, grazie ![]() Se poi potete anche aiutarmi, allora alla prima occasione vi offriro' anche da bere ![]() Grazie ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Sep 1999
Città: Messina
Messaggi: 1807
|
Quote:
![]()
__________________
with Free Software you have Freedom (Richard Stallman) |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
non ho ancora letto la parte sui semafori per i processi (sono al cap 4)
![]() se vuoi puoi darci un'occhiata www.advancedlinuxprogramming.com credo che tu stia cercando le informazioni del capitolo 5, non essendoci ancora arrivato non ti sò dire altro... ciao |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2003
Città: catania
Messaggi: 707
|
scusate, ma come si compila direttamente da emacs?
__________________
Ho trattato con: Ciccillover, Bimbubay, Gianni1482, infrty, juky, yottabyte, magnolia, stranamore, sagomaccio, redsnake, lucafao, beppe, mrmic, brizius78, Oaichehai, evilgem, wistonwolf, pechigno, alphacygni, myk980, pedro80. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
una volta salvato vai su tool->compile
ti compare la linea di comando in fondo e puoi lanciare la compilazione ciao |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 173
|
__________________
powered by Mandrake - You are registered as user #335131 with the Linux Counter |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:17.