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 !