Nyquister

File_esercitation

Apr 16th, 2021 (edited)
416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. /*Scrivere un programma che esegue i seguenti passi rispettando l’ordine
  2. 1)apre un file F in R/W e quindi mantiene il suo descritore
  3. 2)fork-a un nuovo processo che ottiene un mesaggio dall’utente da tastiera e lo scrive sul file F
  4. 3)legge dal file F il messaggio che ha scritto il processo figlio e lo stampa sul terminale*/
  5.  
  6. #include<fcntl.h>
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. #include<string.h>
  10. #include<unistd.h>
  11. #include<sys/wait.h>
  12.  
  13. char *forked_process()
  14. {char *message;
  15.  printf("Insert a message for file:\n");
  16.  scanf("%m[^\n]", &message); // salta questa scanf
  17.  return (message);
  18. }
  19.  
  20. void error(char *mes_err)
  21. {printf("Error unable to %s\n", mes_err);
  22.  exit(1);
  23. }
  24.  
  25. int main(int argc, char* argv[])
  26. {char *fd;
  27.  pid_t forked;
  28.  char *file_message= malloc(1024);
  29.  int len, status;  
  30.  printf("Insert the name of new file: \n");
  31.  scanf("%m[^\n]",&fd);
  32.  if (creat(fd, 0666)==-1)//creo il file
  33.     error("create new file!");
  34.  if (open(fd,O_RDWR)==-1) // lo apro
  35.     error("open the file!");
  36.  forked = fork();
  37.  if(forked==-1)
  38.     error("fork process");
  39.  if(forked==0)
  40.     {file_message = forked_process();
  41.      len = strlen(file_message);
  42.     if (write(*fd,file_message,len) == -1) //scrivo sul file il messaggio prelevato da tastiera
  43.         error(" write on file!");
  44.  }/*else
  45.     {*/wait(&status);
  46.     free(file_message);  
  47.     if(lseek(*fd,'0','0')==-1) // riporto il puntatore al file all'inizio del file
  48.         error("return at start of file");
  49.     if(read(*fd,file_message,len)==-1)
  50.         error("read file!");
  51.     if(close(*fd)==-1)
  52.         error("close file!");
  53.     printf("The message read from file %s is : %s\n", fd, file_message);
  54.     free(file_message);
  55. // }
  56. return (0);
  57.  
  58.    
  59. }
Add Comment
Please, Sign In to add comment