3 votes

Comment définir le nom du fichier principal en utilisant le code c++ ?

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 ?

7voto

NPE Points 169956

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.

5voto

Ernest Friedman-Hill Points 56605

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

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.com

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.

Powered by:

X