Newsgroup: it.comp.os.linux.development
Titolo: Problema con gcc

Ciao a tutti, sono un neofita di Linux ed ho installato da poco la
distribuzione Mandrake 7.1 sul mio portatile. Ho il seguente problema:
Ho scritto un programma in linguaggio C, il solito "Ciao mondo", l'ho
compilato con gcc ed ho ottenuto il file a.out. Quando cerco di far
partire il programma pero', la shell  (bash) mi risponde che il comando
non e' valido, cioe' non esiste il comando a.out.
Chi sa darmi qualche aiuto ?
Grazie.... Claudio.

 non e' valido, cioe' non esiste il comando a.out.
Strano, a me sembra che invece funzioni. Ad ogni modo, quando compili con
gcc puoi specificare il nome del file di output con l'opzione '-o'. Così:
gcc -o ciao ciao.c
Mi pare (ma non ho ancora approfondito la faccenda) che cambi anche il tipo
di eseguibile prodotto... [ho forse detto una bufala... se qualcuno mi
spiega come sta la faccenda gliene sarei grato].
--
Piergiorgio Pirro
piergior...@tin.it
http://web.tiscalinet.it/ppirro
ICQ# 60945968

 non e' valido, cioe' non esiste il comando a.out.
Hai provato con ./a.out?
In altre parole, per motivi di sicurezza la directory corrente spesso non
e' nel path, per cui per eseguire un comando nella dir corrente occorre
precederlo con ./
In particolare Mandrake Linux non mette la dir corrente nel path, ne' per
l'utente root e nemmeno per quello di default
Ciao
Mauro

non e' valido, cioe' non esiste il comando a.out.
Normale.
E' solo questione di PATH.
In Linux, e in Unix in generale, la directory corrente non e' inserita
nel PATH per la ricerca degli eseguibili, per motivi di sicurezza.
Se vuoi lanciare il tuo programma, devi scrivere:
./a.out e vedrai che parte.
-- 
           |Save our planet!
  Ciao     |Save wildlife;
  roberto  |For your E-MAIL use only recycled Bytes !!
           |roberto poggi  
rpo...@softhome.net

.              UIN: 64483080
GPG fpr: 3D40 4146 4F55 D2EA 8202  9AD5 8808 1AF7 9056 7BF7
-- (20000405:78)
printk("Illegal format on cdrom.  Pester manufacturer.\n"); 
	2.2.16 /usr/src/linux/fs/isofs/inode.c

 >non e' valido, cioe' non esiste il comando a.out.


precederlo con ./
Scusate la domanda ingenua... perche` per motivi di sicurezza?
In una macchina privata puo` essere lo stesso un problema?

 In una macchina privata puo` essere lo stesso un problema?
Perche', per esempio, quando tu dai un comando come
ls
dai per scontato che venga eseguito il corrispondente programma di sistema. Ma
se nella tua directory esiste un programma che si chiama ls e che fa altre cose
(diciamo un cavallo di troia) potresti eseguire quello senza nemmeno
accorgertene, SE LA DIR CORRENTE FOSSE NEL PATH. Per esempio, come utente
normale potrei scrivere uno script di shell che contiene la riga
rm -rf  /
chiamarlo ls e metterlo nella mia home directory.
al primo ls eseguito da root ( che crede di eseguire l'ls di sistema) nella mia
directory, il sistema intero viene cancellato   :-((((
Nota che il pericolo riguarda principalmente l'utente root, che ha i permessi
per cancellare ogni file: questo script eseguito da un utente normale e' meno
pericoloso. Per questo motivo, alcune distribuzioni linux mettono la dir
corrente nel path dell'utente normale ma non di root
Per questo ed altri motivi, il path di default non contiene la dir corrente, ma
solo un insieme di dir predefinite e di proprietà di root e nelle quali
l'utente normale non puo' scrivere.
Naturalmente, in un sistema domestico questa regola puo' essere rilasciata: a
casa mia ho aggiunto (PER ULTIMA) la dir corrente al path, cosi' come ho tolto
diverse altre misure relative alla  sicurezza. Ma le distribuzioni linux
prevedono installazioni all'interno di una rete e per piu' utenti, per cui il
sistema si installa per default con un elevato grado di sicurezza
Ciao
Mauro


