Nav apraksta

Puiu Anton 7833c84ae1 documentatie adaugata 2 gadi atpakaļ
docs 7833c84ae1 documentatie adaugata 2 gadi atpakaļ
kprobe cbc985da8e teme inserate 2 gadi atpakaļ
stdio cbc985da8e teme inserate 2 gadi atpakaļ
LICENSE c6bb323eef Initial commit 2 gadi atpakaļ
README.md 7833c84ae1 documentatie adaugata 2 gadi atpakaļ

README.md

Implementare minimalista stdio

Implemented functions

SO_FILE

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

int so_fclose(SO_FILE *stream);

Read and write

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