2011-04-21 2 views
0

Hi J'ai un gestionnaire de signal défini dans un fichier, à partir duquel le signal est généré. J'ai défini une "sigaction de structure statique" pour définir un gestionnaire de signal qui n'est pas statique. Nous savons qu'en utilisant "statique" nous pouvons aussi limiter la portée à un seul fichier, donc en utilisant cette technique pouvons-nous restreindre le gestionnaire de signaux pour attraper les signaux du seul fichier dans lequel il est défini?Restriction d'un gestionnaire de signaux pour capturer les signaux provenant uniquement du fichier où il est défini

Mon "fichier" - File1, qui est lié avec un autre fichier - File2, File2 peut générer des signaux, qui ne devraient pas être attrapés par le gestionnaire File1. Alors, est-ce que je peux réaliser cela, si je mets "struct sigaction statique" dans File1?

enter code here 
File1.c 

static struct sigaction; 
void sigHandler(int sig); // also a handler for SIG_NO but should catch signals generated for only File1.c (sig handler is non-static) 

File2.c 
kill(getpid(), SIG_NO) 

File1.c and File2.c are linked together. 
+1

Peut-on avoir un code pour regarder s'il vous plaît? –

+0

Il est encore en phase de conception, donc pas de code que nous avons. Mais je peux donner quelques briefings, éditer ci-dessus et le mettre. – kingsmasher1

+0

Peut-être que vous devriez essayer d'ajouter, disons gestionnaire pour SIGINT, utiliser 'signal (SIGINT, gestionnaire)' au début de ce fichier (doit être défini dans une fonction) et avant de retourner cette fonction utiliser 'signal (SIGINT, SIG_DFL) ' –

Répondre

2

Peu importe où vous déclarez/définissez le gestionnaire. Si vous installez le gestionnaire, il gère TOUS les signaux de ce type reçus par le processus. Donc, peu importe la portée et le lien de vos identifiants, une fois que vous avez installé le gestionnaire, il gère tout.

+0

Alors, quelle est l'utilisation de" statique ", si je déclare une variable statique, il devrait être limitée à ce fichier? – kingsmasher1

+0

Ce n'est pas ce que 'static' est pour. – cnicutar

+0

Je veux dire que c'est une utilisation supplémentaire de statique (limitation de la portée aux fichiers), s'il vous plaît vérifier. – kingsmasher1

1

Vous ne pouvez pas directement.

Les informations sur le fichier spécifique généré un segment de code donné ne font pas partie de l'exécutable (à l'exception des informations de débogage, mais qui ne sont pas utilisées ou analysées par le noyau).

Vous devrez implémenter une certaine logique dans votre application et dans le gestionnaire de signal si le signal doit uniquement être traité dans certaines situations.

(Ou repenser la conception de votre application et mettre en œuvre deux processus distincts.)

+0

Mais j'ai mis le 'sigaction' comme statique. – kingsmasher1

+0

ce n'est pas pertinent. Une fois que tous vos fichiers sont liés à l'exécutable, il n'y a plus d'informations sur le fichier source. (sauf pour les informations de débogage le cas échéant, qui ne sont pas utilisées par le noyau). * – Mat

+0

Donc, vous dites, la limitation de la portée aux variables dans un seul fichier ne peut pas être réalisée en utilisant statique? – kingsmasher1