Laborator 9: Operaţii cu fişiere. Aplicaţii folosind fişiere. 

Obiectivele laboratorului

În acest laborator vom studia:

ATENȚIE! Toate sarcinile se vor realiza folosind o abordare modularizată (cu funcții). Discutați cu asistentul alegerile voastre, dacă nu sunteți siguri care ar trebui să fie semnăturile funcțiilor.

TOATE exercițiile vor fi verificate și cu valgrind.

Materiale utile:

Exerciții

  1. [intro-to-files] Scrieți un program care:
  1. [random-output] Se citeasc n și un șir de n numere de la tastatură. Să se creeze un fișier în care să se salveze doar cele n elemente (fără dimensiunea șirului).

    a. Fișierul generat este text:

    Exemplu de rulare:
    Input (stdin):
    5
    10 1 -1 2 257
    
    Output (2-gen.txt):
    10 1 -1 2 257
    

    b. Fișierul generat este binar:

    Exemplu de rulare:
    Input (stdin):
    5
    10 1 -1 2 257
    
    Output(hexdump -C 2-gen.bin):
    00000000  0a 00 00 00 01 00 00 00  ff ff ff ff 02 00 00 00  |................|
    00000010  01 01 00 00                                       |....|
    00000014
    
    Explicație
    • 10 = 0x00.00.00.0a => 0a 00 00 00
    • 1 = 0x00.00.00.01 => 01 00 00 00
    • -1 = 0xff.ff.ff.ff => ff ff ff ff
    • 2 = 0x00.00.00.02 => 02 00 00 00
    • 257 = 0x00.00.01.01 => 01 01 00 00
  1. [random-input] Se dă un fișier cu un număr nedeterminat de numere (de tip int). Se cere să se scrie un program care:
  1. [BONUS] [sizeof-file] Să se scrie o funcție care primește ca parametru numele unui fișier și returnează dimensiunea în bytes a acestuia. Să se realizeze un program pentru testare (numele fișierului e citit de la tastatură).

    Observație: Putem folosi utilitarul ls (cu flagul -l) pentru a verifica dimensiunea fișierelor din directorul corect.

    $ ls -al
    total 120
    drwxr-xr-x 5 darius darius  4096 Nov 19 00:48 .
    drwxr-xr-x 8 darius darius  4096 Nov 18 20:55 ..
    -rw-r--r-- 1 darius darius  1246 Nov 19 00:08 1-bin.c
    -rw-r--r-- 1 darius darius    12 Nov 19 00:22 1-gen.bin
    -rw-r--r-- 1 darius darius    13 Nov 18 23:37 1-gen.txt
    -rw-r--r-- 1 darius darius   755 Nov 19 00:08 1-text.c
    -rw-r--r-- 1 darius darius   517 Nov 19 00:22 2-bin.c
    -rw-r--r-- 1 darius darius    20 Nov 19 00:28 2-gen.bin
    -rw-r--r-- 1 darius darius    12 Nov 19 00:22 2-gen.txt
    -rw-r--r-- 1 darius darius   507 Nov 19 00:31 2-text.c
    -rw-r--r-- 1 darius darius   788 Nov 19 00:42 3-bin.c
    -rw-r--r-- 1 darius darius   822 Nov 19 00:35 3-text.c
    -rw-r--r-- 1 darius darius   484 Nov 19 00:48 4-sizeof_file.c
    -rwxr-xr-x 1 darius darius 16888 Nov 19 00:48 a.out
    -rwxr-xr-x 1 darius darius 16888 Nov 19 00:48 sizeof_file
    
    # Compilare program
    $ gcc 4-sizeof_file.c -o sizeof_file
    
    # Determinare dimensiune pentru a.out
    $ ./sizeof_file
    a.out
    a.out has 16888 bytes
    
    # Determinare dimensiune pentru sizeof_file
    $ ./sizeof_file
    sizeof_file
    sizeof_file has 16888 bytes
    
    # Determinare dimensiune pentru 3-bin.c
    $ ./sizeof_file
    3-bin.c
    3-bin.c has 788 bytes