Comment puis-je définir le nom du fichier principal en utilisant du code c++ sous Linux ?
Linux vide le fichier central en cas de crash binaire, est-il possible de définir le nom du fichier central ?
Comment puis-je définir le nom du fichier principal en utilisant du code c++ sous Linux ?
Linux vide le fichier central en cas de crash binaire, est-il possible de définir le nom du fichier central ?
Sur mon système (Ubuntu 10.04 avec le noyau 2.6.32), man core
ne donne aucune indication sur le fait que la dénomination peut être choisie processus par processus. En revanche, il est possible de changer le nom à l'échelle du système en modifiant le fichier /proc/sys/kernel/core_pattern
:
B
/proc/sys/kernel/core_pattern
(depuis Linux 2.6 et 2.4.21) peut être défini pour pour définir un modèle qui est utilisé pour nommer les fichiers core dump. Le modèle modèle peut contenir des spécificateurs % qui sont substitués par les valeurs valeurs suivantes lorsqu'un fichier core est créé :%% a single % character %p PID of dumped process %u (numeric) real UID of dumped process %g (numeric) real GID of dumped process %s number of signal causing dump %t time of dump, expressed as seconds since the Epoch (00:00h, 1 Jan 1970, UTC) %h hostname (same as nodename returned by uname(2)) %e executable filename (without path prefix) %c core file size soft resource limit of crashing process (since Linux 2.6.24)
Un seul
%
a de même que la combinaison d'une balise%
f autre que ceux énumérés ci-dessus. Tous les autres caractères du modèle deviennent une partie littérale du nom de fichier principal. Le modèle peut inclure'/'
c noms de répertoire. La taille maximale du nom de fichier principal résultant est de 128 octets (64 octets dans les noyaux antérieurs à 2.6.19). La valeur par défaut dans ce fichier est "core". [ ]/proc/sys/kernel/core_pattern
ne comprend pas"%p"
et/proc/sys/kernel/core_uses_pid
(voir ci-dessous) est non nulle, alors.PID
sera ajouté au nom de fichier du noyau.
Je crois cette page décrit ce que vous recherchez, en général. Ce que vous pouvez faire, c'est définir la façon dont les fichiers de base sont nommés en modifiant une entrée magique dans le fichier proc
système de fichiers :
echo "pattern" > /proc/sys/kernel/core_pattern
où motif est un printf
-qui est documenté sur la page liée. Faire cela à partir de C++ impliquerait simplement d'ouvrir et d'écrire dans ce fichier en utilisant les mécanismes normaux. Cependant, vous devez être Root pour pouvoir écrire dans 'core_pattern'.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.