Read()

Linux.fista
Versio hetkellä 15. toukokuuta 2022 kello 00.36 – tehnyt NasmHerra (keskustelu | muokkaukset) (Ak: Uusi sivu: '''Read()''' on C-standardikirjaston tarjoama funktio, jolla voi lukea tietyn määrän dataa tiedostosta. Funktio kutsuu samannimisen järjestelmäkutsun. Kaikki korkeamma...)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun

Read() on C-standardikirjaston tarjoama funktio, jolla voi lukea tietyn määrän dataa tiedostosta. Funktio kutsuu samannimisen järjestelmäkutsun. Kaikki korkeamman tason input-funktiot, kuten fgets(), käyttää Read-funktiota. Read-funtkio on määritelty seuraavasti:

ssize_t read(int fd, void *buf, size_t count);

Turvallisuus[muokkaa]

Read-funktio on huomattavasti turvallisempi kuin esimerkiksi scanf() tai gets(), koska se lukee vain tietyn määrän dataa. Siten ohjelmoija pystyy estämään ylivuodot.

Esimerkki[muokkaa]

Seuraava ohjelma lukee tiedoston /root/example.txt sisällön ilman virheenhallintaa:

#include <malloc.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char **argv) {
    const char filename[] = "/root/example.txt";
    off_t filesize;
    off_t oldoffset;
    int fd;
    unsigned char *buf;

    fd = open(filename, O_RDONLY);
    oldoffset = lseek(fd, 0, SEEK_CUR);
    filesize = lseek(fd, 0, SEEK_END);
    lseek(fd, oldoffset, SEEK_SET);

    buf = malloc(filesize);
    read(fd, buf, filesize);
    free(buf);
    close(fd);
    return 0;
}