SIGSEGV > écriture, lecture | siginfo, sigcontext [C/Unix] - C - Programmation
Marsh Posté le 11-11-2003 à 00:42:30
siginfo_t :
Code :
|
J'oubliais : man sigaction, tout est dedans.
Marsh Posté le 11-11-2003 à 01:14:27
Merci de ton aide, mais j'ai le nez dedans depuis trop longtemps. Ou est-ce qu'on fait la différence entre un sigsev du à une lecture ou à une écriture ?
Marsh Posté le 11-11-2003 à 01:43:05
Je vois ca :
|
Mais ca me dit rien à propos d'une lecture ou d'une écriture.
|
Dans le fault.c du mon kernel :
|
Je ne vois pas le moyen employé pour connaître si il s'agit d'une lecture ou d'une écriture.
Marsh Posté le 11-11-2003 à 04:37:59
Y'a un truc qui m'échappe : puisque ton programme segfault, tu récupères un coredump. Donc tu lances un debugger avec le core et tu vois où ca coredump exatement. C'est comme ça qu'on fait d'habitude. Pourquoi cherches-tu à intercepter le SIGSEGV ?
Edit : en plus, je vois pas comment une lecture pourrait faire segfaulter ton prog. A partir du moment ou c'est dans ton address space, tu peux lire...
Marsh Posté le 11-11-2003 à 09:42:04
C'est un peu particulier. Dans la cadre d'un projet, je développe une mémoire partagée répartie. Initialement, je fais un open de /dev/zero que je mmap par la suite en n'accordant aucun droit afin de symboliser l'état de la mémoire sur le serveur. Lorsque je tente d'accéder à une page de ma mémoire, il y a un sigsegv (je détermine si il s'agit d'un vrai ou d'un faux d'abord ) car je n'ai pas les droits dessus : un gestionnaire de signal prend la main et s'occupe d'aller demander la page au serveur.
Pour connaître les droits que je dois accorder à cette page, il me faut donc connaître si le sigsegv est du à une tentative de lecture ou une tentative d'écriture. Une solution pourrait être d'accorder d'abord le droits en lecture, d'attendre un deuxième sigsegv, et d'accorder les droits en écriture, mais c'est n'est pas optimal.
Voilà toute l'histoire
Marsh Posté le 10-11-2003 à 18:41:59
Hello,
Dans le cadre d'un projet, je souhaiterais connaître la nature d'un SIGSEGV que je gère dans un gestionnaire signal. Jusqu'à présent, je pensais faire ca avec la structure sigcontext, mais apparement, c'est déprécié. Qu'elle est la solution au gout du jour ? J'ai été incapble de trouver qqchose de convaincant :|
Merci à vous !
@+