1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#include <stdio.h>
#include <sys/sem.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdlib.h> // exit
#include <fcntl.h> //open read write
key_t cle; //Creation de la cle
int semid; // Nom des semaphores
char *file="/tmp/fic.data"; //fichier qui va contenir le message d'acc
#define MAX 0 //Definition de la taille des semaphores
//Fonction pour ecrire les paramètres dans un fichier
void ecriredansfichier(key_t vcle,ushort* vinit_sem,int vsemid)
{
int file;
file=open("filex.txt",O_CREAT | O_RDWR,0666);
if(file < 0)
{
printf("Le fichier n'a pas pu etre créé\n");
}
else
{
printf("Le fichier a été créé avec succès\n");
file=open("filex.txt", O_WRONLY,0666);
write(file,vsemid,0666);
close (file);
//write(file,vsemid ,0777);
}
}
int main(int argc, char *argv[])
{
//Creation de la clé à partir du nom du fichier
cle=ftok(file,0);
if(cle==-1)
{
fprintf(stderr,"Erreur de creation de la clé\n");
exit(1);
}
//Creation des semaphores
semid = 557056;//semget(cle,2,IPC_CREAT|IPC_EXCL|0666);
if(semid==-1)
{
fprintf(stderr,"Erreur avec semid\n");
exit(2);
}
// initialisation des 2 semaphores
ushort init_sem[2]={1,0}; // valeurs d'initialisation des semaphores
if (semctl(semid,2,SETALL,init_sem)==-1)
{
fprintf(stderr,"Probleme sur semctl SETALL\n");
exit(3);
}
//Ecriture des paramètres dans un fichier pour être lu par les autres processus
ecriredansfichier(cle,init_sem,semid);
} |
Partager