Linux program kopiujący pliki tekstowe

0

Witam,
Mam chcę napisać program kopiujący pliki tekstowe coś takiego ja komenda "cp" pod linuksem. A więc chcę to zrobić tak że pobiorę rozmiar pliku, potem stworze dynamiczną tablice znaków o pobranym rozmiarze, następnie pobieram zawartość pliku funkcją read i zapisuje funkcją write. I i mam problem w tym jak pobrać zawartość pliku i stworzyć tablice która pomieści cały plik.
Na razie ma coś takiego:

 #include <fcntl.h> 
#include <stdio.h> 
#include <stdlib.h>
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 


int main (int argc, char* argv[]) 
{
  char* nazwa_in = argv[1];
  char* nazwa_out = argv[2]; 

  int plik_in = open(nazwa_in, O_RDONLY );
  int plik_out = open(nazwa_out, O_WRONLY | O_CREAT | O_APPEND) ;
   
  if (!plik_in || !plik_in) {
    perror ("Error"); 
    return 1; 
  } 


  size_t bytes_read;
  char word[50];

  	  bytes_read = read(plik_in, word, sizeof(word));
	  write(plik_out,word,sizeof(word));  


		
close(plik_in);
close(plik_out);
 
  return 0; 
} 
0

A po co chcesz wczytać do pamięci cały plik?
Co jak będzie zajmował kilkaset gigabajtów?

0

A więc jak będę wczytywał dane do tablicy funkcją read to jak mam wykryć koniec pliku?

1

Funkcja read() zwraca ci ilość bajtów odczytanych. (zaraz jakiś grammar nazi się przyczepi).
Jeśli czytałeś 1000 bajtów a dostałeś 999, albo 400, albo 1, to znaczy że jest to ta ostatnia mniejsza paczka. A jeśli dostałeś 0 to znaczy że rozmiar pliku był podzielny przez 1000 i nie ma ostatniej paczki.
Wartości ujemne oznaczają błąd.

Możesz zatem zrobić pętlę:

int n;
while ((n = read()) > 0)
     // n bajtów odczytano

1 użytkowników online, w tym zalogowanych: 0, gości: 1