Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Scrivere un programma che esegue i seguenti passi rispettando l’ordine
- 1)apre un file F in R/W e quindi mantiene il suo descritore
- 2)fork-a un nuovo processo che ottiene un mesaggio dall’utente da tastiera e lo scrive sul file F
- 3)legge dal file F il messaggio che ha scritto il processo figlio e lo stampa sul terminale*/
- #include<fcntl.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<unistd.h>
- #include<sys/wait.h>
- char *forked_process()
- {char *message;
- printf("Insert a message for file:\n");
- scanf("%m[^\n]", &message); // salta questa scanf
- return (message);
- }
- void error(char *mes_err)
- {printf("Error unable to %s\n", mes_err);
- exit(1);
- }
- int main(int argc, char* argv[])
- {char *fd;
- pid_t forked;
- char *file_message= malloc(1024);
- int len, status;
- printf("Insert the name of new file: \n");
- scanf("%m[^\n]",&fd);
- if (creat(fd, 0666)==-1)//creo il file
- error("create new file!");
- if (open(fd,O_RDWR)==-1) // lo apro
- error("open the file!");
- forked = fork();
- if(forked==-1)
- error("fork process");
- if(forked==0)
- {file_message = forked_process();
- len = strlen(file_message);
- if (write(*fd,file_message,len) == -1) //scrivo sul file il messaggio prelevato da tastiera
- error(" write on file!");
- }/*else
- {*/wait(&status);
- free(file_message);
- if(lseek(*fd,'0','0')==-1) // riporto il puntatore al file all'inizio del file
- error("return at start of file");
- if(read(*fd,file_message,len)==-1)
- error("read file!");
- if(close(*fd)==-1)
- error("close file!");
- printf("The message read from file %s is : %s\n", fd, file_message);
- free(file_message);
- // }
- return (0);
- }
Add Comment
Please, Sign In to add comment