PasjaGSM.pl
  Jesteś w: Forum > Metody tworzenia nowych plików


Metody tworzenia nowych plików

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Metody tworzenia nowych plików
Poprzedni temat «» Następny temat
Autor Wiadomość
 
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 37
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-06-01, 13:48   Metody tworzenia nowych plików

Witam.

Na prośbę druidbartka przedstawię dziś krótko różne metody tworzenia plików w file systemie dodawanym przez NokiX'a (TFS).

Różne podejścia podzielić możemy na 3 metody.

1. Obsługa w stylu funkcji biblioteki C.

Programujecie w C, znacie więc pewnie funkcje fopen(), fwrite(), fclose(). TFS również ma takie funkcje. Różnią się troche nazwami oraz parametrami ale główne założenia są te same. Przykładowy kod tworzący plik wygląda tak:

Kod:
static void zapisz_w_stylu_fopen(void)
{
   // deskryptor pliku, jest to zwykla liczba
   int fd;
   
   // otwieramy plik, TFS_CREATERM oznacza ze plik
   // tworzymy, a gdy taki juz istnieje to nadpisujemy
   fd = tfsopen( "test.txt", TFS_CREATERM );

   // prawidlowy deskryptor jest wiekszy od zera
   if( fd>0 )
   {
      char *text = "To jest plik tekstowy.";
     
      // zapisujemy napis do otworzonego pliku
      tfswrite( fd, text, strlen(text) );
     
      // zamykamy plik; to jest najbardziej newralgiczne miejsce
      // bo dopiero tu dane zostaja zapisane do FLASHa; tfswrite()
      // kopiuje je tylko do bufora w RAMie;
      // tfserror() wyswietli komunikat o bledzie gdyby cos
      // poszlo nie tak
      tfserror( tfsclose( fd ) );
   }
   // jesli tfsopen() zwroci wartosc mniejsza od zera to oznacza to
   // blad, tu wyswietlamy komunikat o nim za pomoca tfserror()
   else tfserror( fd );
}


Zaletą tej metody jest to, że jest "znana i lubiana". Sam jednak użyłem jej chyba tylko w jednym miejscu. Główną wadą jest to że zapisywane dane kopiowane są do bufora w RAMie, jeszcze gorsze jest to, że ten bufor jest powiększany w miarę jak zapisujemy więcej danych. Oznacza to więc rezerwację większego obszaru, skopiowanie danych i zwolnienie starego. Przy dużym pliku łatwo zabraknie nam pamięci.

2. Na szybko.

Tak naprawdę jednak plik możemy stworzyć jedną funkcją:

Kod:
static void zapisz_szybko(void)
{
   char *text = "To jest plik tekstowy.";

   // bezposrednie wywolanie funkcji tfsadd() (w przykładzie
   // zapisz_w_stylu_fopen() wywolywana jest ona przez tfsclose())
   // nie mozna tu podawac flag z tfsopen() typu TFS_CREATERM;
   // funkcja zawsze nadpisuje plik, jesli istnieje
   tfserror( tfsadd( "test.txt", 0, text, sizeof(text) ) );
}


tfsadd zarezerwuje miejsce w systemie plików, stworzy plik i zapisze podane dane bezpośrednio do pamięci FLASH. Nie ma tu żadnych buforów pośrednich. Szybko i efektywnie. To zero w parametrach to flagi. Generalnie jest to to samo co w tfsopen z wyjątkiem flag typowych dla tfsopen jak TFS_CREATE czy TFS_RDONLY. Można natomiast podać tu TFS_IPMOD (patrz niżej) czy TFS_HIDDEN.

3. Z opóźnieniem.

Bardzo ciekawa jest ta ostatnia metoda. Przypomina ona drugą ale pozwala rozdzielić proces rezerwowania miejsca od faktycznego zapisu danych. Wygląda to mniej więcej tak:

Kod:
static void zapisz_z opoznieniem(void)
{
   char *text = "To jest plik tekstowy.";

   // tworzymy plik i rezerwujemy miejsce w systemie plikow
   tfsadd( "test.txt", TFS_IPMOD, NULL, sizeof(text) );
   
   // zapisujemy dane bezposrednio do pliku
   tfsipmod( "test.txt", text, 0, sizeof(text) );
}


W tym przykładzie zapisaliśmy cały plik jednym wywołaniem tfsipmod. Ale nie jest to konieczne. Plik można zapisywać kawałkami, oczywiście raz zapisane dane już tam zostaną i nie mogą być nadpisywane.

Metody tej używa menadżer plików podczas odbierania. Najpierw przesyłana jest informacja o nazwie pliku i jego wielkości przez co może on wyświetlić pytanie o akceptację oraz stworzyć plik IPMOD (patrz wywołania tfsadd w przykładzie). Następnie dane przesyłane są kawałkami, po kilkaset bajtów. Te kolejne paczki zapisywane są funkcją tfsipmod. Dzięki temu można przesłać bardzo duże pliki bez względu na dostępną ilość RAMu.

Narazie to tyle. Omówienia wymaga jeszcze czytanie plików które też może być zrobine na kilka sposobów i w którym trzeba na pewne rzeczy uważać.

Piszcie komentarze niżej, będę odpowiadał na pytania które ten krótki tekst (mam nadzieję) zrodzi.

Pozdrawiam
[Yak]
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do: