Newsgroup: it.comp.os.linux.development
Titolo: Scrivere demone per linux

Ciao a tutti,
vorrei scrivere un'aplicazione che traduce un servizio di NT in
un'applicazione per Linux. Credo che i cosiddetti demoni siano (più o meno)
l'equivalente dei servizi di NT. Smentitemi se ho detto una sciocchezza.
Vorrei sapere se esistono HOWTOs o documentazione per scrivere questo tipo
di applicazioni.
Grazie in anticipo
--
Claves do Amaral - 
claves.d...@netbusiness.it

 l'equivalente dei servizi di NT. Smentitemi se ho detto una sciocchezza.
I demoni sotto linux sono  dei programmi che girano in background[1]. La
struttura del programma non e` nulla di particolare:
int main () {
	pid_t pid;
	pid = fork();
	if (pid == -1) {
		fprintf(stderr, "Errore durante fork\n");
		return EXIT_FAILURE;
	}
	if (pid == 0) {
		while(qualcosa)
			fai_quello_che_devi();
		return EXIT_SUCCESS;
	}
	return EXIT_SUCCESS;
}
In pratica il processo fork()a,  il padre esce immediatamente, il figlio
(il blocco di if (pid == 0)) rimane in esecuzione in backgroud.
ciao
Kronos
[1] quando dico  backgroud intendo che non e` piu`  gestito dalla shell,
non c'entra nulla con i jobs.
-- 
Home: 
http://kronoz.cjb.net
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani

 Kronos
ok, grazie 10^3.
Claves


Non ti pare che con una struttura del genere vengano generati un po' di zombie?
E poi perche' il fork incondizionato? Non sarebbe meglio far forkare il programma
solo in caso di necessita' (es. a seguito di una connessione di un client)?
C:\>iao Angelo.

 di un client)?
Forse  non hai  capito quello  che  ho fatto. Il  fork() serve  soltanto
per  creare  un  processo  che  stia  in  background  e  faccia  il  suo
lavoro.  All'interno del blocco if si puo`, ad esempio, creare un socket
e  mettersi in  ascolto,  e poi  eventualmente fare  un  altro fork  per
gestire la connessione. Se non venisse  eseguito il primo fork il demone
rimarrebbe legato alla  shell (e morirebbe con essa) e  non e` cosi` che
deve andare.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
I went to God just to see
And I was looking at me
Saw heaven and hell were lies
When I'm God everyone dies

> l'equivalente dei servizi di NT. Smentitemi se ho detto una sciocchezza.
K> I demoni sotto linux sono  dei programmi che girano in background[1]. La
K> struttura del programma non e` nulla di particolare:
Sei sicuro che un processo scritto  come hai fatto tu si stacchi dalla
TTY  di controllo  ?  Che sappia  io  caratteristica fondamentale  dei
daemon  non  è  il girare  in  background  ma  non  avere una  tty  di
controllo...
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )


INfatti. Per la precisione per fare un vero demone si dovrebbe:
-chiamare per fare una nuova 
sessione.in
 questo modo il processo diventa
session leader, diventa il nuovo process group leader e non ha un
controlling terminal (eccolo qui)
-cambiare la wdirectory in / cosi' se qualche partizione viene smontata non
ci sono casini
-mettere la maschera di creazione dei files al valore desiderato (se deve
creare dei files, in questo caso il punto prima va rivisto)
-chiudere i file descriptor non richiesti eg. 0 1 (ed ev. 2 )
e questo dovrebbe essere tutto
ciao e buone vacanze
Villo

 }
mi consigliano di far fare al figlio una chiamata a setsid(), anche
se a dir la verita' non ho capito benissimo a cosa serva...
-- 
addio, e grazie per tutto il pesce

 TTY  di controllo  ?
Si stacca dalla shell. Per staccarlo dal terminale basta chiudere i file
descriptor:
fclose(stderr);
fclose(stdout);
fclose(stdin);
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
This message will self distruct in 5 seconds.

 controlling terminal (eccolo qui)
Se prima non chiudi i flussi standard il processo non lo stacchi dal
terminale. 
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non ho ancora capito se il mio cane e` maschio o femmina:
quando fa la pipi` si chiude in bagno

 Claves, hai lasciato il DEI ? :)
ciao Saint,
arriva per tutti il momento di lasciare la
confortevole sede di Via Gradenigo e intraprendere
il cammino con le proprie gambe :)
In bocca al lupo
--
<>~<>~<>~<>~<>~<>
Claves do Amaral
claves....@tin.it
<>~<>~<>~<>~<>~<>