czytanie pliku od konca

0
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?

0

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 ...

0

to moze jeszcze inaczej. mam do odczytania z pliku tekst, ktory zajmuje ostatnie 128 bajtow pliku. jak to odczytac?

0

no to przesuń się w pliku na 128 od końca, i wczytaj 128 bajtów, czego nie rozumiesz?

0

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 ..

0

tzn -128, ale tez nie dziala

0
fstream plik(nazwa, ios::in);
plik.seekg(128, ios_base::end);
char tmp[128];
plik.read(temp, 128);
0

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;
}
0

znaczy znalazłem, bo to czyjeś, ale nie działa :P

0

można usunąć dane tej osoby z kodu? ja nie moge edytowac

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