Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. #include <unistd.h>
  5. #include <error.h>
  6. #include <fcntl.h>
  7. void handler1(int);
  8.  
  9. int pid, intbuff, i, letti=1, j; //Variabili globali
  10.  
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14. int fd = open("/home/alessio/Scrivania/sync.txt", O_RDWR | O_CREAT | O_APPEND, 0777);
  15. char valori[1024], buff[4096], buffin[4096];
  16. umask(0000); // setto la maschera di sistema a 0
  17.  
  18.  
  19. printf("Inserire i numeri da scrivere/leggere\n");
  20.  
  21. if(read(0, buff, 3) < 0) { //scrivo il valore N
  22. perror("Errore in lettura\n");
  23. }else {
  24. printf("Numeri da stampare %s\n", buff);
  25. intbuff = atoi(buff); //convero il valore string a int
  26. }
  27.  
  28. pid = fork(); // creazione figlio
  29.  
  30. if(pid != 0) { // PADRE
  31. for(i=0; i<intbuff; i++){
  32. sprintf(valori, "%d", i);
  33. printf("Processo PADRE, scrivo: %d\n", i);
  34. write(fd, valori, 3); //scrivo sul file il valore di I
  35. signal(SIGUSR1,handler1); //sblocca figlio
  36. sleep(1);
  37. pause(); //blocca padre
  38. while(letti==0){};
  39. lseek(fd, (0L), SEEK_END); //mi rimetto alla fine del file dopo essermi spostato x la lettura del figlio
  40. }
  41. }else if(pid==0) { //FIGLIO
  42. for(j=0; j<intbuff; j++){
  43. pause();
  44. while(letti==1){}; //blocca figlio
  45. lseek(fd, (0L-3), SEEK_END); //mi sposto all' ultimo carattere scritto
  46. read(fd, buffin, 3);
  47. printf("Processo FIGLIO, leggo:%s\n",buffin);
  48. signal(SIGUSR1,handler1); //sblocca padre
  49. sleep(1);
  50. }
  51. }
  52. close(fd); //chiudo buffer del file
  53. return 0;
  54. }
  55.  
  56.  
  57.  
  58.  
  59. void handler1(signo){
  60. if(signo == SIGUSR1) {
  61. if(letti==0){
  62. letti=1;
  63. }
  64. if(letti==1){
  65. letti=0;
  66. }
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement