Puiu Anton cbc985da8e teme inserate 2 years ago
..
src cbc985da8e teme inserate 2 years ago
Makefile cbc985da8e teme inserate 2 years ago
README.md cbc985da8e teme inserate 2 years ago

README.md

Implementare minimalista stdio

Functii implementate

SO_FILE

SO_FILE *so_fopen(const char *pathname, const char *mode);

int so_fclose(SO_FILE *stream);

Citire si scriere

int so_fgetc(SO_FILE *stream);

int so_fputc(int c, SO_FILE *stream);

size_t so_fread(void *ptr, size_t size, size_t nmemb, SO_FILE *stream);

size_t so_fwrite(const void *ptr, size_t size, size_t nmemb, SO_FILE *stream);

Seek

int so_fseek(SO_FILE *stream, long offset, int whence);

long so_ftell(SO_FILE *stream);

Buffering

int so_fflush(SO_FILE *stream);

Extra

int so_fileno(SO_FILE *stream);

int so_feof(SO_FILE *stream);

int so_ferror(SO_FILE *stream);

Organizare

-

  1. Explicație pentru structura creată (sau soluția de ansamblu aleasă):
    • Cu scopul de a realiza o implementare cat mai usor de urmarit, am incercat, acolo unde am considerat necesar, sa implementez functiile cat mai explicit. Un astfel de exemplu este reprezentat de implementarea functiei 'fopen'. Am ales sa efectuez verificarile pentru permisiuni, impreuna cu deschiderea efectiva a fisierelor in functii separate, fiecare functie reprezentand un mod de deschidere al fisierului.
    • In cazul functiilor 'fgetc'/'fread'/'fputc'/'fwrite', am ales sa implementez doua functii responsabile cu operatiile de scriere/citire in buffer.
    • Aceste functii se numesc 'so_read_from_buffer', respectiv 'so_write_tobuffer'. Mecanismele necesare pentru implementarea suportului de buffering sunt surprinse prin functii precum 'so{read|write}{state}{small|big}'. In aceste functii a fost mutat codul necesar fiecarei situatii in care se afla buffer-ul. Un dezavantaj este reprezentat de faptul ca anumite secvente de instructiuni se repeta in diferite functii.

Obligatoriu:

  • Am incercat sa realizez tema intr-o maniera cat mai modulara, pentru a realiza implementarea cu un minim de efort pe ambele platforme.
  • Consideri că tema este utilă? Da, intrucat prin aceasta implementare am cautat notiuni pe care le-am intalnit la diferite materii, cum ar fi teoria sistemelor, analiza algoritmilor, etc.
  • Consideri implementarea naivă, eficientă, se putea mai bine? Da, se putea mult mai bine. Implementarea este primul prototip, dar aceasta trebuie modificata, intrucat pentru a implementa functiile 'popen'/'pclose', trebuie schimbat modul in care determin daca am ajuns sau nu la EOF, iar implementarea 'ftell' lasa de dorit.

  • Am implementat totul, mai putin functiile 'popen'/'pclose'.

  • Pentru modelare, am ales sa definesc anumite structuri, cum ar fi 'MODE', 'BOOL' si tipul enumerare 'LAST_OP' pentru a spori lizibilitatea codului.

Bibliografie