Newsgroup: it.comp.os.linux.development
Titolo: faq icold

			    _________   ____
			   / ____/   | / __ \
			  / /_  / /| |/ / / /
			 / __/ / ___ / /_/ /
			/_/   /_/  |_\___\_\
		newsgroup it.comp.os.linux.development
Ultimo aggiornamento: 24 Dicembre 2003
Sezione 1: Domande generali.
1.1 Quali linguaggi sono disponibili per sviluppare sotto linux?
1.2 Quali sono gli IDE disponibili per i vari linguaggi?
1.3 Ho creato  il mio  primo  programma  in Linux,  ma quando  lo eseguo
    ottengo "command not found".
1.4 Perché   è  sconsigliato   includere  la  directory  corrente  nella
    variabile d'ambiente PATH?
1.5 Ma scrivere "./nomeprogramma" non è equivalente a "nomeprogramma"?
1.6 Esiste Visual Basic per linux?
1.7 E Delphi?
1.8 Come faccio a fare le parentesi { } ?
1.9 Come faccio a creare un cd live?
Sezione 2: Compilatore e makefiles.
2.1 Come posso compilare un programma C/C++?
2.2 Il  mio programma è suddiviso  su più file, come  posso creare degli
    object e poi linkarli in un unico esegubile?
2.3 Cosa vuol dire "undefined reference to ..."?
Sezione 3: Applicazioni grafiche
3.1 Desidero  fare un programma  con finestre e pulsanti,  che strumenti
    devo usare?
3.2 E per fare un programma "multimediale"?
Sezione 4: Documentazione on line
4.1 Documenti generali
4.2 Bash
4.3 Programmazione di rete
4.4 Usare seriali e parallele
------------------------------------------------------------------------
Sezione 1: Domande generali.
1.1 Quali linguaggi sono disponibili per sviluppare sotto linux?
Praticamente tutti. C/C++, Java, Perl,  Pascal, Ruby, Python, PHP, Kylix
(Delphi) e molti altri ancora. Molti  programmi in Linux sono scritti in
C/C++,  tuttavia in  questi ultimi  anni  si stanno  affermando anche  i
linguaggi interpretati come Ruby o  Python. La scelta ovviamente dipende
molto da cosa si intende sviluppare!
1.2 Quali sono gli IDE disponibili per i vari linguaggi?
Tra gli IDE  più "trendy" del momento c'é senz'altro  Anjuta e KDevelop,
tuttavia non  è da sottovalutare  l'uso di  semplici editor come  gvim o
emacs  che  hanno  un  ottimo interfacciamento  con  i  compilatori  più
diffusi.
1.3 Ho creato  il mio  primo  programma  in Linux,  ma quando  lo eseguo
    ottengo "command not found".
In  Linux, se  non ne  viene  esplicitamente indicato  il percorso,  gli
eseguibili vengono  cercati nelle directory specificate  dalla variabile
d'ambiente PATH. Solitamente il PATH  non include la directory corrente,
quindi devi lanciare il  programma con ./nomeprogramma oppure modificare
il PATH  affinché includa la  directory corrente, ma questo  è altamente
sconsigliato.
1.4 Perché   è  sconsigliato   includere  la  directory  corrente  nella
    variabile d'ambiente PATH?
Perché si  rischia di  eseguire accidentalmente un  programma pericoloso
che si  trova nella directory corrente  magari al posto del  suo omonimo
"buono" che si trova in una  directory fidata (come /bin, /usr/bin etc.)
E' opportuno che nel PATH siano inclusi solo programmi "fidati".
1.5 Ma scrivere "./nomeprogramma" non è equivalente a "nomeprogramma"?
Dal punto di vista del file system si, ma poiché la seconda potrebbe far
intendere che "nomeprogramma" sia nel  PATH, esso viene eseguito solo se
si trova effettivamente in una delle directory nel PATH.
Invece   scrivere  "./nomeprogramma"   evita  questa   ambiguità  perché
specifica esplicitamente la  directory in cui si trova il  file e quindi
viene eseguito anche se non si trova nelle directory in PATH.
1.6 Esiste Visual Basic per linux?
Grazie   al   cielo  no.   Tuttavia   dovrebbe   possibile  usare   Mono
(
http://www.go-mono.org
)   per   compilare    il   codice   scritto   in
VisualBasic.Net (il compilatore  CIL e le librerie  grafiche sono ancora
in alfa).
1.7 E Delphi?
La  Borland ha  sviluppato kylix,  un  software proprietario,  che è  il
porting di delphi per linux.
1.8 Come faccio a fare le parentesi { } ?
In ambiente grafico:
{ -> AltGr+7
} -> AltGr+0
In console:
{ -> AltGr+8
} -> AltGr+9
1.9 Come faccio a creare un cd live?
Non   è   una   cosa   difficile,    soprattutto   se   si   usano   gli
strumenti   giusti.    Se   
freshmeat.net
   si   trova    il   programma
bblcd,   altrimenti   questo    documento   può   essere   interessante:
http://am.xs4all.nl/phpwiki/index.php/MainModuleHowto
Sezione 2: Compilatore e makefiles.
2.1 Come posso compilare un programma C/C++?
Per il C: gcc nomesorgente.c -o nome_dell'eseguibile
Per il C++ g++ nomesorgente.cpp -o nome_dell'eseguibile
2.2 Il  mio programma è suddiviso  su più file, come  posso creare degli
    object e poi linkarli in un unico esegubile?
Per  fare  questo devi  compilare  i  signoli  file con  gcc/g++  usando
l'opzione -c che crea, per l'appunto, un object. Il link viene fatto dal
comando ld,  o più banalmente si  può sempre usare gcc  che provvedere a
richiamare ld. L'automatizzazione del tutto è possibile ricorrendo ad un
Makefile.
2.3 Cosa vuol dire "undefined reference to ..."?
Una  o più  librerie  necessarie per  il tuo  programma  non sono  state
indicate  sulla riga  di comando  di gcc  (o ld).  Per fare  questo devi
utilizzare  lo switch  -l.  Per convenzione  le  librerie sono  chiamate
libnome.so , se sono dinamiche, oppure libnome.a , se sono statiche. Per
linkarle dinamicamente  al tuo eseguibile  devi passare a  gcc l'opzione
-lnome (senza  il prefisso  "lib" ne` il  suffisso ".so").  Per linkarle
staticamente devi invece linkare il file libnome.a all'eseguibile. Se le
librerie non si trovavano nel path  di ricerca (man ld.so) gcc non sara`
in grado  di trovarle. Per  aggiungere una  diretory al path  di ricerca
devi usare lo switch -L (es: -L/home/foobar/mylibdir).
Sezione 3: Applicazioni grafiche
3.1 Desidero  fare un programma  con finestre e pulsanti,  che strumenti
    devo usare?
Esistono molte  librerie che facilitano  questo compito, le più  in voga
sono senz'altro  le GTK+ e le  QT. Tra gli altri  toolkit disponibili ci
sono le wxwindows.
3.2 E per fare un programma "multimediale"?
Le  librerie  SDL   (
http://www.libsdl.org
),  abbastanza  sofisticate  e
multipiattaforma,  consentono  anche  la  gestione  dell'audio  e  altre
periferiche.
Un'altra     possibilità     è      data     dalle     librerie     SVGA
(
http://www.svgalib.org
), forse più leggere ma più limitate.
Sezione 4: Documentazione on line
4.1 Documenti generali
Appunti di Informatica Libera 
http://a2.swlibero.org
Guida alla programmazione in linux 
http://gapil.firenze.linux.it/
4.2 Bash
Bash Advanced Scripting Guide 
http://www.tldp.org/guides.html
4.3 Programmazione di rete
Network Programming 
http://digilander.libero.it/foobar/papers/index.html
4.4 Usare seriali e parallele
Per    comunicare    con    la     porta    parallela    puoi    cercare
a   partire    da   qui:    
http://people.redhat.com/twaugh/parport/
   e
http://www.torque.net/linux-pp.html
.
Per  comunicare con  la porta  seriale puoi  cercare a  partire da  qui:
http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/

una cosa: se qualcuno di voi ha spezzoni di codice per mostrare per
esempio l'uso della select per fare dei timeout di lettura su socket o
altri codici utili e lo rilascia gpl li aggiungerei volentieri alla faq.

 esempio l'uso della select per fare dei timeout di lettura su socket
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int socket;
int server;
struct timeval timeout;
fd_set read_set;
int ret;
/* Suppongo che il socket /server/ sia in ascolto su una data porta */
socket = accept(server, NULL, 0);
if (socket == -1) {
        perror("accept()");
        exit(EXIT_FAILURE);
}
/* Aggiungo /socket/ al set di file descriptors che verra` monitorato
 * dalla select
 */
FD_ZERO(&read_set);
FD_SET(socket, &read_set);
/* Timeout dopo 10.5 secondi */
timeout.tv_sec = 10;
timeout.tv_usec = 500000;
ret = select(socket + 1, &read_set, NULL, NULL, &timeout);
if (ret == -1) {
        perror("select()");
        exit(EXIT_FAILURE);
} else if (ret) {
        /* Ci sono dati disponibili, posso iniziare una lettura */
} else {
        /* Timeout: Nessun dato disponibile entro 10.5 secondi. Il
         * programma agisce di conseguenza (eg. chiude il socket).
         */
}
NB: Se il codice viene inserito in un loop la struttura timeout e il set
di fd *devono* essere re-inizializzati prima di ogni chiata a select.
Luca
-- 
Home: 
http://kronoz.cjb.net
Una donna sposa un uomo sperando che cambi, e lui non cambiera`. Un
uomo sposa una donna sperando che non cambi, e lei cambiera`.