Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <unistd.h>
- #include <error.h>
- #include <fcntl.h>
- void handler1(int);
- int pid, intbuff, i, letti=1, j; //Variabili globali
- int main(int argc, char *argv[])
- {
- int fd = open("/home/alessio/Scrivania/sync.txt", O_RDWR | O_CREAT | O_APPEND, 0777);
- char valori[1024], buff[4096], buffin[4096];
- umask(0000); // setto la maschera di sistema a 0
- printf("Inserire i numeri da scrivere/leggere\n");
- if(read(0, buff, 3) < 0) { //scrivo il valore N
- perror("Errore in lettura\n");
- }else {
- printf("Numeri da stampare %s\n", buff);
- intbuff = atoi(buff); //convero il valore string a int
- }
- pid = fork(); // creazione figlio
- if(pid != 0) { // PADRE
- for(i=0; i<intbuff; i++){
- sprintf(valori, "%d", i);
- printf("Processo PADRE, scrivo: %d\n", i);
- write(fd, valori, 3); //scrivo sul file il valore di I
- signal(SIGUSR1,handler1); //sblocca figlio
- sleep(1);
- pause(); //blocca padre
- while(letti==0){};
- lseek(fd, (0L), SEEK_END); //mi rimetto alla fine del file dopo essermi spostato x la lettura del figlio
- }
- }else if(pid==0) { //FIGLIO
- for(j=0; j<intbuff; j++){
- pause();
- while(letti==1){}; //blocca figlio
- lseek(fd, (0L-3), SEEK_END); //mi sposto all' ultimo carattere scritto
- read(fd, buffin, 3);
- printf("Processo FIGLIO, leggo:%s\n",buffin);
- signal(SIGUSR1,handler1); //sblocca padre
- sleep(1);
- }
- }
- close(fd); //chiudo buffer del file
- return 0;
- }
- void handler1(signo){
- if(signo == SIGUSR1) {
- if(letti==0){
- letti=1;
- }
- if(letti==1){
- letti=0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement