int in_fd = open(in_filename, O_RDONLY);
if(lseek(in_fd, 128, 2) < 0)
return -1;
// w petli - czytaj plik
czy to umozliwi mi przeczytanie 128 bajtow od konca pliku?
int in_fd = open(in_filename, O_RDONLY);
if(lseek(in_fd, 128, 2) < 0)
return -1;
// w petli - czytaj plik
czy to umozliwi mi przeczytanie 128 bajtow od konca pliku?
moze sie wyraze jasniej. chce zrobic cos takiego: przejsc na 128 bajt od konca pliku, ale czytac go linia po linii, od poczatku tego koncowego 128 bitu ...
to moze jeszcze inaczej. mam do odczytania z pliku tekst, ktory zajmuje ostatnie 128 bajtow pliku. jak to odczytac?
no to przesuń się w pliku na 128 od końca, i wczytaj 128 bajtów, czego nie rozumiesz?
teoretycznie to powinno być ok:
lseek(in_fd, 128, 2)
ale "nie działa" bo mając w pliku np. liczby 1-128 (czyli powinien mi przeczytać cały plik) to czyta za mało ..
tzn -128, ale tez nie dziala
fstream plik(nazwa, ios::in);
plik.seekg(128, ios_base::end);
char tmp[128];
plik.read(temp, 128);
Coś takiego namazałem:
//Katarzyna Mazur
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
int rozmiarPliku(const char *nazwa)
{
struct stat st;
if (stat(nazwa, &st) == 0)
return st.st_size;
return -1;
}
int main(int argc, char **argv)
{
char *plikWE = "dane.txt", , *plikWY = "wy.txt";
int deskWE, przeczytano = 0, ile = 255;
char bufor[255];
deskWE = open(plikWE, O_RDONLY);
if (deskWE == -1)
return -1;
int deskWY = open(plikWY, O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR);
if (deskWY == -1)
return -1;
int size = rozmiarPliku(plikWE);
if(lseek(deskWE, SEEK_END, 0) < 0)
return -1;
if(lseek(deskWE, size-128, SEEK_SET) < 0)
return -1;
for(;;)
{
przeczytano = read(deskWE, bufor, ile);
if (przeczytano > 0)
{
write(deskWY, bufor, przeczytano);
}
else
{
if (przeczytano == 0)
{
if (close(deskWE) < 0)
return -1;
break;
}
else if (przeczytano == -1)
{
break;
return -1;
}
}
}
return 0;
}
znaczy znalazłem, bo to czyjeś, ale nie działa :P
można usunąć dane tej osoby z kodu? ja nie moge edytowac