begin process at 2012 05 30 06:45:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

Recuperer PID de l'appli et ecrire dans un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Recuperer PID de l'appli et ecrire dans un fichier

mercredi 26 novembre 2008 à 00:55:34 | Recuperer PID de l'appli et ecrire dans un fichier

Metalbobinou

Bonsoir,
Alors voila, vu que j'ai du mal en C, et que cela va etre necessaire que j'en fasse pour mes etudes, j'ai decide de m'y mettre.
J'ai voulu faire simple pour le moment : recuperer le PID de mon executable et l'ecrire dans un fichier, tout en verifiant que le fichier n'est pas deja existant (en fait c'est pour essayer un pitit Daemon.... qui recuperera des signaux et s'arretera, ou pas.... tout en l'empechant de demarrer plsuieurs fois).

Donc pour ca, j'ai fais un pitit bout de code tout bebete :

-------------------------------------
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>

int write_in_file()
{
  int fd;
  pid_t pid;

  fd=open("/tmp/pid-de-mon-daemon.pid", O_CREAT | O_WRONLY | O_EXCL, 0666);
  if (fd < 0)
    {
      write(STDERR_FILENO,
     "Une instance du Daemon est deja en cours\n",
     47);
      close(fd);
      return(2);
    }
  else
    {
      pid=getpid();
      printf("%u",pid);
      write(fd,&pid,5);
      close(fd);
      return(0);
    }
}

int main ()
{
  int i;

  i=write_in_file();
  if ( i == 0 )
    {
      return(0);
    }
  else
    {
      return(2);
    }
}

----------------------

Mon "vrai" probleme, c'est qu'au printf, je ne vois que les 4 premiers nombre de mon PID alors qu'il en fait 5.... (<= a prendre avec des pincettes :P)
Bon enfin, ca, c'est un des 2 problemes, l'autre, c'est que dans mon fichier, j'ai des caracteres "bizarres".



Je suppose que pour le 2e probleme, c'est a cause du type... certes c'est un nombre, mais les 'pid_t' ne doivent pas utiliser les memes "tailles cases" que les integer ou les strings.


Si je dis qu'il ne m'affiche que les 4 premiers nombres sur 5, c'est qu'en faisant d'autres fonctions avec pleins de printf de modulos etc...
J'ai vu des nombres plus grands ! Ca m'etonne quand meme... (par exemple le printf presnete la haut affiche 8406, un autre dans mes bidouilles 84062 et un modulo me donne 2....)


Ca se trouve je n'ai qu'un seul probleme : transtypage depuis pid_t vers un char*...

Si quelqu'un pouvait m'eclairer, ca serait gentil :)
Merci d'avance....

PS : J'ai pense a "itoa", malheureusement elle n'est pas dispo sur mon systeme ^^'

Metalbobinou !

mercredi 26 novembre 2008 à 14:26:06 | Re : Recuperer PID de l'appli et ecrire dans un fichier

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

(Réponse en ultra speed)

Tu dois avoir pid_t défini dans un des .h de ton système.
typedef ???????? pid_t.

Tu peux aussi essayer d'afficher un sizeof(pid) -> ça devrait te faire 4.

Essaie avec un %d et un %i à la place de ton %u aussi.

write(fd,&pid,5);

Ca, ça ne veut absolument rien dire.
mercredi 26 novembre 2008 à 14:30:23 | Re : Recuperer PID de l'appli et ecrire dans un fichier

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Je complète...

Les deux .h les plus suceptibles de contenir pid_t :

#include <sys/types.h>
#include <unistd.h>

write(fd,&pid,5);

Ca écrit 5 octets situés à l'adresse de pid. Ca marcherait pour une chaîne, mais là, ça écrit pid en binaire. Et ce n'est surtout pas parce que pid est un nombre à 5 chiffres qu'il est représenté par 5 octets ! Informe toi sur la représentation des nombres en mémoire...
mercredi 26 novembre 2008 à 19:26:53 | Re : Recuperer PID de l'appli et ecrire dans un fichier

Metalbobinou

Merci beaucoup de la reponse ! ^^
Alors justement, je savais pas du tout sur combien de bits le PID etait represente, j'ai pris 8 au pif (alors que c'etait LOIN de pouvoir 65535 :P)...

Mais j'ai trouve ma reponse a l'ecole, un pote m'a conseille :

pid_t pid;
int i;

pid = getpid();
i = (int)pid;

Et ca marche ! :D
i contient bien le PID en chiffres, et non pas en code ASCII (ou autre :P) !
Probleme resolu ! Et promis, je vais chercher la representation en memoire...
J'avais seulement la taille d'un char en tete (4 bits je crois)...

Metalbobinou !
jeudi 27 novembre 2008 à 09:26:48 | Re : Recuperer PID de l'appli et ecrire dans un fichier

rt15

Membre Club Administrateur CodeS-SourceS
Un char : 8 bits = 1 byte = 1 octet.

Listes des types de données, leurs tailles et plages.
lundi 1 décembre 2008 à 10:39:39 | Re : Recuperer PID de l'appli et ecrire dans un fichier

sheorogath

Membre Club Administrateur CodeS-SourceS
puis de toute maniere ca:
      write(fd,&pid,5);

ca marcheras pas

eventuellement:

char buffer[10];

snprintf(buffer, sizebuffer, "%u", pid);
write(fd, buffer, strlen(buffer) * sizeof(*buffer));

et ton caste je vois pas a quoi il sert ... entre avoir un int et un unsigned int ca reviens du meme au meme
puis si jamais par hasard ton pid rentre pas dans un int ca marcheras pas (ok ya peu de chance)

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"


Cette discussion est classée dans : fichier, int, include, pid, fd


Répondre à ce message

Sujets en rapport avec ce message

c++ creation d'un fichier texte a nom variable [ par sloaneaaaa ] ben voila je voudrai creer un fichier texte auquel je puisse donner n'importe quel nom ms g des erreurs que je comprend pasle nom de fichier est ds un aidez moi c pour lire ds un fichier question bateau... [ par roomsmush ] pkoi ce code ne marche pas j'ai beau me casser la tete sur mon ecran rien y fait : sachant que c:\fcach est rampli par la chaîne suivante : "c:\fichie Probleme pointeur ? [ par foxtrox ] Salut,J'essai de realiser un prog permettant de modifier une valeur d'offset dans un exécutable. Malheureusement il y a un point sur lequel je bloque classe fstream [ par romca ] SalutJ à tous, j'ai un petit souci sur un corrigé de cours qui ne fonctionne pas. Le but était de rentrer des nombres entiers dans un fichier binaire Appel d'une fonction contenue dans une dll [ par ybuchheit ] Bonjour, je souhaiterais appeler une fonction contenue dans une dll. Je n'ai pas le source de cette dll, le seul fichier dont je dispose est le .dll Probleme ASCII et coonversion string vers char (enfin je pense) [ par Leptis ] Salut a tous les pgm qu'il y a sur ce site. Avant tout je tien à vous prévenir que je suis en gros newbie en C.Voila mon problème : je cherche à faire Lire des chiffres avec les virgules [ par Stiko ] salut, j'ai fait un petit programme pour ouvrire un fichier texte qui contient seument des chifres séparées par des points virgules.ce programme lit l Utilisation du settimer [ par titi4659 ] Bonjour,je souhaiterai utiliser le SetTimer() mais j'ai des problèmes avec:J'utilise bien une fonction callback dans laquelle je vais écrire dans un f Lecture fichier impossible avec SDL [ par CCJ ] Hello.j'utilise SDL pour me faire un petit jeu 2D. Seulement je recontre actuellement un petit probleme. Il semblerait en effet qu'il bloque l'utilisa tracer des points en c [ par fireman42 ] Bonjour à tous :) Pour un projet d'algorithmique, je dois écrire en C le programme suivant : a) Créer 1000 points d'abscisse de 1 à 1000 et d'ordonné


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,852 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales