• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C] Program kopiujący pliki

0 głosów
67 wizyt
pytanie zadane 9 stycznia w C i C++ przez vasiv Użytkownik (590 p.)

Witam,

mam do napisania w języku C program, który przy użyciu read oraz write będzie kopiował pliki. Nie działa on jednak prawidłowo, gdyż kopiuje zawsze kilka linijek pliku tekstowego więcej, niż w pliku kopiowanym. Gdzie popełniam błąd. Oto mój kod 

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

#define STR_LENGTH 255


void getPaths(char source[], char direction[] )
{
	printf ("Podaj sciezke do pliku zrodlowe: ");
	scanf ("%s",source); 
	printf ("Podaj sciezke do zapisu: ");
	scanf ("%s",direction);
}

int openFile (char path[])
{

	int descriptor = open(path,O_RDONLY,0600);
        if(descriptor==-1) {
                perror("open");
                return descriptor;
        }
	return descriptor;
}

int createFile (char path[])
{
	int descriptor = creat(path,0600);
        if(descriptor==-1) {
                perror("creat :");
                return descriptor;
        }
        return descriptor;

}

int main(void)
{
	struct stat fileInformation;
	struct stat newFileInformation;
	char source [STR_LENGTH] = "";
	char direction [STR_LENGTH] = "";
	char buff [50];	


	getPaths(source, direction);

	int sourceDescriptor = openFile(source);
	if(sourceDescriptor == -1)
		perror ("openFile: ");

	int directionDescriptor = createFile(direction);
        if(directionDescriptor == -1)
                perror ("createFile: ");

	if(fstat(sourceDescriptor, &fileInformation) == -1)
		perror("fstat: ");

	if(fstat(directionDescriptor, &newFileInformation) == -1)
		perror("fstat: ");
	
	while (newFileInformation.st_size < fileInformation.st_size)
	{
	if(fstat(directionDescriptor, &newFileInformation) == -1)
		perror("fstat: ");
	if (read(sourceDescriptor, buff, sizeof(buff)) == -1)
		perror("read: ");
	if(write(directionDescriptor, buff, sizeof(buff)) == -1)
		perror ("write: ");
	}

	if(close(sourceDescriptor)==-1)
	perror("close"); 
	if(close(directionDescriptor)==-1)
                perror("close"); 
	return 0;

}

Pozdrawiam.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–1 głos
1 odpowiedź 146 wizyt
0 głosów
3 odpowiedzi 2,596 wizyt
pytanie zadane 22 października 2015 w C i C++ przez Macek Kolo Mądrala (5,050 p.)
0 głosów
2 odpowiedzi 91 wizyt
pytanie zadane 17 września w C i C++ przez program naczelny Początkujący (290 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,717 zapytań

76,653 odpowiedzi

149,843 komentarzy

18,124 pasjonatów

Przeglądających: 185
Pasjonatów: 0 Gości: 185

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...