int var
main() {
signal(SIGINT, routine)
var=0;
demarre_thread_qui_devra_etre arrêté()
}
int routine(int signal) {
var=1;
}
void* thread(void* arg) {
listen()
while(var!=1) {
accept()
tout_ça()
}
}
c'est pas du code correct mais c'est l'idée.
sinon, éviter de mettre des routines de lib style printf dans le corps du signal, ça m'a déja joué des sales tours.
Ben sans variable globale, je vois pas comment c'est possible...

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbo Zerosquare Le 09/04/2010 à 23:16Edité par Zerosquare le 09/04/2010 à 23:18 Ben le handler du signal, ce n'est pas toi qui l'appelle, il est appelé automatiquement quand le signal est généré. Donc ce n'est pas toi qui choisis les paramètres passés.
Ton énoncé laisse supposer qu'il y aurait un moyen de récupérer le file descriptor d'une socket ouverte, mais je n'en connais pas...

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbopeut être avec select pour tester l'état de certains FD? sinon je vois pas.
Et surtout, je ne vois pas l'intérêt de ne pas utiliser de variable globale. C'est bizarre, comme énoncé.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turboptet a base de setjmp/longjmp? mais de toute faut une globale pour y accéder depuis l'intérieur de la fonction signal.
PpHd Le 10/04/2010 à 00:37 J'ai bien une idée via shm_open / / ftruncate / mmap / shm_unlink mais ca me parait super complexe comparé à utiliser une var globale.
surtout que j'ai remarqué qu'un simple printf() dans un signal handler faisait planter un programme.
Sinon, les fonctions ne sont pas comptées comme des variables globales ?
Tu peux écrire une fonction qui utilise une variable statique.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
tama Le 10/04/2010 à 13:34 Oui, c'est dans le cadre d'un exercice, ça doit sûrement pas se passer comme ça dans la "vraie vie" comme tu dis
Oui, je suis un épitéen, promo 2013 (normalement)
Et c'est quoi une fonction globale ?
programmeur sur TI ^^mon blog sur les TI =>
clicmon (p'tit) fofo sur les TI =>
clic Sous GNU/Linux et certains autres *nix, le dossier /proc/self/fd contient les descripteurs de fichiers ouverts par le processus courant.
Ah, c'est peut-être que ça que le prof attend, alors.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbo Link Le 10/04/2010 à 20:36 Euh...
Les fonctions bloquantes n'échouent-elles pas automatiquement avec EINTR quand elles sont interrompues par un signal qui n'est ni en Ignore ni en Exit?

Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.