#include #include #include #include #include #include #include #include #include #include #include #include #include /* * ***esercizio B6 'scrittura su file da parte di più processi' *** Scrivere un programma che: crea un file di dimensione N bytes nella cartella dei file temporanei /tmp/ #define N (256*16) #define M 16 il programma crea M processi: il processo i-mo scrive il carattere ‘A’+i in una parte del file di dimensione N / M bytes, con offset pari a i * N/M. * */ #define N (256*16) #define M 16 int main() { int fd; char * map; char * filename = "prova.txt"; pid_t pid; fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR); if (fd == -1) { perror("open"); exit(1); } if (ftruncate(fd, N) == -1) { perror("ftruncate"); exit(1); } map = mmap(NULL, N, PROT_WRITE | PROT_READ, MAP_SHARED, fd , 0); if (map == MAP_FAILED) { perror("mmap"); exit(1); } if (close(fd) == -1) { perror("close"); exit(1); } for (int i = 0; i < M; i++) { // il processo i-mo scrive il carattere ‘A’+i in una parte del file di dimensione N / M bytes, // con offset pari a i * N/M. pid = fork(); if (pid == -1) { perror("fork"); exit(1); } if (pid == 0) { int offset = i * N/M; int dim = N / M; memset(&map[offset], 'A' + i, dim); exit(0); } } while (wait(NULL) != -1) ; printf("bye\n"); return 0; }