#include #include #include #include #include #include int main (void) { int fd1, fd2; char *buf; int bytes_read, bytes_written; // Alocam spatiu pentru buffer-ul de citire buf = malloc (11); if (buf == NULL) { perror ("malloc"); // afiseaza un mesaj de eroare exit (EXIT_FAILURE); // iese din program cu valoarea EXIT_FAILURE, definita ca 1 } // deschidem in mod read-only fisierul un.fisier fd1 = open ("un.fisier", O_RDONLY); if (fd1 < 0) { perror ("open un.fisier"); exit (EXIT_FAILURE); } // Deschidem in mod write-only fisierul alt.fisier // Daca fisierul exista, este sters (O_TRUNC) // Daca fisierul nu exista, este creat (O_CREAT) // 0644 specifica drepturile fisierului nou creat, daca este cazul. 0 indica faptul ca numarul este in baza 8 fd2 = open ("alt.fisier", O_WRONLY | O_TRUNC | O_CREAT, 0644); // alte optiuni de a deschide fisierul: // fd2 = open ("alt.fisier", O_WRONLY | mO_CREAT, 0644); // fd2 = open ("alt.fisier", O_WRONLY | O_APPEND | O_CREAT, 0644); // fd2 = 1; if (fd2 < 0) { perror ("open alt.fisier"); exit (EXIT_FAILURE); } // ne pozitionam in fisier cu descriptorul fd1 cu 20 de unitati de la sfarsitul fisierului if (lseek (fd1, -10, SEEK_END) < 0) { perror ("lseek"); exit (EXIT_FAILURE); } // citim ultimele 10 caractere in buffer bytes_read = read (fd1, buf, 10); if (bytes_read < 0) { perror ("read"); exit (EXIT_FAILURE); } buf[bytes_read] = '\0'; // scriem ce am citit in fisierul cu descriptorul fd2 bytes_written = write(fd2, buf, 10); // inchidem fisierele close (fd1); close (fd2); // eliberam buffer-ul alocat free (buf); return 0; }