Warning: Undefined array key "view" in /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php on line 47

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php on line 48

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php on line 49

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php on line 50

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php:2) in /var/www/html/wp-content/uploads/classes/so/1920/lab-examples/index.php on line 51
/** * duplica un file utilizzando 'mmap' per operare sui file */ #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fdin, fdout; char *src, *dst; struct stat sb; if (argc < 3) { fprintf(stderr, "uso: %s \n", argv[0]); exit(1); } /* apre il file sorgente in lettura */ if ((fdin = open(argv[1], O_RDONLY)) == -1) { perror(argv[1]); exit(1); } /* recupera le informazioni sul file sorgente */ if (fstat(fdin, &sb) < 0) { perror(argv[1]); exit(1); } /* apre il file destinazione troncandolo o creandolo */ if ((fdout = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, (sb.st_mode & 0777))) == -1) { perror(argv[2]); exit(1); } /* controlla se il file sorgente รจ vuoto: creerebbe problemi sia con lseek * che con mmap */ if (sb.st_size == 0) exit(0); /* espande il file destinazione alla dimensione voluta prima di mapparlo: * utilizza 'ftruncate' */ if (ftruncate(fdout, sb.st_size) == -1) { perror("ftruncate su destinazione"); exit(1); } /* si poteva usare anche un 'lseek' (alla posizione 'sb.st_size -1') e un * 'write' per un solo byte */ /* mappa il file sorgente */ if ((src = (char *)mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fdin, 0)) == MAP_FAILED) { perror("mmap su sorgente"); exit(1); } /* mmap il file destinazione */ if ((dst = (char *)mmap(NULL, sb.st_size, PROT_WRITE, MAP_SHARED, fdout, 0)) == MAP_FAILED) { perror("mmap su destinazione"); exit(1); } /* copia il contenuto della sorgente sulla destinazione: usa 'memcpy' per * maggiore efficienza */ memcpy(dst, src, sb.st_size); /* operazioni di chiusura non indispensabili... */ munmap(src, sb.st_size); munmap(dst, sb.st_size); close(fdin); close(fdout); }